我有兴趣列出Linux中特定路径下的每个文件,目录,符号链接的详细信息。它还应包括隐藏文件/目录。例如,详细信息应包括每个列出项目的权限设置,所有权详细信息等。最后,它应该递归地显示该路径下“其他”目录下的所有内容。
我尝试使用ls -la
但不能显示更多信息(如所有权)也不能递归显示路径下的所有内容。
理想情况下,信息应以人类可读的格式呈现。
为了递归显示每个文件的信息,你应该使用find
而不是ls
。然后使用exec
执行stat
命令以显示所需信息。
这样的东西应该提供你想要的东西:
find /path/to/search/under/ -name '*' -exec stat -c '%n %F %a %U %G %N' {} \;
例如,给定此目录树(使用Tree command):
|-- dirA
| |-- dirB
| | |-- .hiddenfileA
| | |-- fileA
| | |-- fileB
| | `-- symlincA -> /home/symlincA
| | |-- dirC
| | | |-- .hiddenFileB
使用命令find /path/to/search/under/ -name '*' -exec stat -c '%n %F %a %U %G %N' {} \;
输出:
/dirA directory 555 root root '/dirA/'
/dirA/dirB directory 555 root root '/dirA/dirB'
/dirA/dirB/.hiddenfileA regular file 555 root root '/dirA/dirB/.hiddenfileA'
/dirA/dirB/fileA regular file 555 root root '/dirA/dirB/fileA'
/dirA/dirB/fileB regular file 755 root root '/dirA/dirB/fileB'
/dirA/dirB/symlincA symbolic linc 777 root root '/dirA/dirB/symlincA' -> '/home/symlincA/'
/dirA/dirB/dirC directory 755 root root '/dirA/dirB'
/dirA/dirB/dirC/.hiddenFileB regular file 555 root root `/dirA/dirB/dirC/.hiddenFileB`
Stat
为每个文件显示的信息提供了更多选项。使用man stat
,您可以看到这些可用选项:
%八进制访问权限(注意'#'和'0'printf标志)
%人类可读形式的访问权限
%b分配的块数(参见%B)
%B%b报告的每个块的大小(以字节为单位)
%C SELinux安全上下文字符串
%d十进制设备号
%D设备号,以十六进制表示
%f十六进制的原始模式
%F文件类型
%g所有者的组ID
%G所有者的组名
%h硬链接数
%i inode编号
%m挂载点
%n文件名
%N引用文件名,如果符号链接,则引用取消引用
%o最佳I / O传输大小提示
%s总大小,以字节为单位
%t主要设备类型(十六进制),用于字符/块设备特殊文件
%T小型设备类型,十六进制,用于字符/块设备特殊文件
%u所有者的用户ID
%U所有者的用户名
文件出生时间%,人类可读; - 如果不知道
文件出生的%W时间,自Epoch以来的秒数; 0如果不知道
%x上次访问的时间,人类可读
上次访问的%X时间,自Epoch以来的秒数
最后数据修改的时间%,人类可读
最后数据修改的%Y时间,自Epoch以来的秒数
最后状态变化的%z时间,人类可读
上次状态变化的%Z时间,自纪元以来的秒数
编辑:ilkkachu's answer提供相同的基本选项显示为stat
没有使用单独的stat
命令,所以它应该是首选,除非你希望显示更多高级选项,只有在stat
中找到。
虽然你可以使用ls
(ls -R
)获得递归列表,但使用find
可能更好。 GNU中的-printf
动作让你控制输出格式:
$ find -printf "%M %u %g %TY-%Tm-%Td %.12TT %p \n"
drwxr-xr-x user somegroup 2017-12-14 16:00:45.581 .
-rw-r--r-- user somegroup 2017-12-14 16:00:43.185 ./foo
drwxr-xr-x user somegroup 2017-12-14 16:00:55.960 ./dir
调整.12
中的宽度说明符%TT
以控制秒字段中的小数位数。字段宽度设置也适用于其他字段,通常的反斜杠转义(\t
等),因此如果您想要12个字符的固定宽度用户名和组列,请使用%12u
和%12g
。为了获得数字形式的访问权限,我建议使用%04m
而不是普通的%m
强制前导零并使字段恒定宽度。
或者只需使用find -ls
以固定格式获取人类可读输出:
$ find -ls
1703352 4 drwxr-xr-x 3 user somegroup 4096 Dec 14 16:00 .
1704987 0 -rw-r--r-- 1 user somegroup 0 Dec 14 16:00 ./foo
1704988 4 drwxr-xr-x 2 user somegroup 4096 Dec 14 16:00 ./dir
虽然请注意,如果您的任何文件名包含换行符,则其中任何一个都会出现问题。