如何recursion列出所有文件和目录

在Free BSD上使用tcsh shell,有没有办法recursion列出所有文件和目录,包括文件的所有者,组和相对path?

ls -alR接近,但不显示每个文件前面的相对path,它显示了分组顶部的path

owner% ls -alR total 0 drwxr-xr-x 3 owner group 102 Feb 1 10:50 . drwx------+ 27 owner group 918 Feb 1 10:49 .. drwxr-xr-x 5 owner group 170 Feb 1 10:50 subfolder ./subfolder: total 16 drwxr-xr-x 5 owner group 170 Feb 1 10:50 . drwxr-xr-x 3 owner group 102 Feb 1 10:50 .. -rw-r--r-- 1 owner group 0 Feb 1 10:50 file1 -rw-r--r-- 1 owner group 0 Feb 1 10:50 file2 

我想要的是输出如下:

 owner group ./relative/path/to/file 

这个问题的接受答案显示了文件的相对path,但不显示所有者和组。

Solutions Collecting From Web of "如何recursion列出所有文件和目录"

这个怎么样:

 find . -exec ls -dl \{\} \; | awk '{print $3, $4, $9}' 

使用 。 很少有Linux发行版在默认情况下安装它(在只有GUI的黑暗时代 :-),但它始终在标准版本库中可用。 它也应该可用于* BSD,请参阅http://mama.indstate.edu/users/ice/tree/

使用:

 tree -p -u -g -f -i 

要么

 tree -p -u -g -f 

或者检查手册页中的许多其他有用的参数。

适用于Linux Debian:

 find $PWD -type f 

find接近:

 find . -printf "%u %g %p\n" 

还有“%P”,如果你想使路径与指定的目录相关,就从文件名中去掉前缀。

请注意,这是GNU查找,我不知道如果BSD查找也支持-printf。

你已经有了一个可行的答案,但作为参考,你应该能够在BSD上做到这一点(我已经在Mac上测试过):

 find . -ls 

如果你喜欢用Perl,不要用它作为shell命令的包装。 在本地Perl中执行更快,更方便,更有弹性。 此外,它避免了临时正则表达式。

 use File::Find; use File::stat; find (\&myList, "."); sub myList { my $st = lstat($_) or die "No $file: $!"; print getgrnam($st->gid), " ", getpwuid($st->uid), " ", $File::Find::name, "\n"; } 

使用一个shell脚本。 或者一个Perl脚本。 示例Perl脚本(因为它更容易执行):

 #!/usr/bin/perl use strict; use warnings; foreach(`find . -name \*`) { chomp; my $ls = `ls -l $_`; # an incomprehensible string of characters because it's Perl my($owner, $group) = /\S+\s+\S+\s+(\S+)\s+(\S)+/; printf("%-10s %-10s %s\n", $owner, $group, $_); } 

也许比其他答案更冗长,但应该做的伎俩,并应节省你不得不记得要输入什么。 (代码未经测试)