列出具有详细信息的目录下的所有内容(Linux Shell命令)

问题描述 投票:0回答:2

我有兴趣列出Linux中特定路径下的每个文件,目录,符号链接的详细信息。它还应包括隐藏文件/目录。例如,详细信息应包括每个列出项目的权限设置,所有权详细信息等。最后,它应该递归地显示该路径下“其他”目录下的所有内容。

我尝试使用ls -la但不能显示更多信息(如所有权)也不能递归显示路径下的所有内容。

理想情况下,信息应以人类可读的格式呈现。

linux shell
2个回答
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编号

%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中找到。


2
投票

虽然你可以使用lsls -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

虽然请注意,如果您的任何文件名包含换行符,则其中任何一个都会出现问题。

© www.soinside.com 2019 - 2024. All rights reserved.