linux - 如何递归列出所有文件和目录



shell (5)

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

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

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

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

https://ffff65535.com


find接近:

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

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

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


使用一个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, $_);
}

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


这个怎么样:

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     




shell