我有兴趣列出Linux中每个文件,目录,特定路径下的符号链接的详细信息。它还应包括隐藏文件/目录。例如,详细信息应包括每个列出项目的权限设置,所有权详细信息等。最后,它应该递归显示该路径下“其他目录”下的所有内容。
我尝试使用ls -la
,但无法显示更多信息(如所有权),也无法以递归方式显示路径下的所有内容。
理想情况下,信息应以人类可读的格式呈现。
答案 0 :(得分:2)
要以递归方式显示每个文件的信息,您应使用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 number
%m挂载点
%n文件名
%N引用文件名,如果符号链接
,则引用取消引用%o最佳I / O传输大小提示
%s总大小,以字节为单位
%t主要设备类型(十六进制),用于字符/块设备特殊 文件
%T小型设备类型,十六进制,用于特殊字符/块设备 文件
%u用户ID
%U所有者的用户名
文件出生时间%,人类可读; - 如果不知道 文件出生时间%,自纪元以来秒; 0如果不知道%x上次访问的时间,人类可读
上次访问的%X时间,自Epoch以来的秒数
上次修改数据的时间%,人类可读
上次数据修改时的%Y时间,自Epoch后的秒数
%z上次状态更改的时间,人类可读
上次状态变化的%Z时间,自纪元以来的秒数
编辑:ilkkachu's answer确实提供了与stat
相同的基本选项,而不使用单独的stat
命令,因此除非您希望显示更多高级选项,否则它应该是首选仅在stat
中找到。
答案 1 :(得分:2)
虽然您可以使用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
和{{1 }}。要以数字形式获取访问权限,我建议使用%12g
而不是普通%04m
来强制前导零并使字段保持恒定宽度。
或者只需使用%m
以固定格式获取人类可读输出:
find -ls
虽然请注意,如果您的任何文件名包含换行符,则其中任何一个都会出现问题。