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

时间:2017-12-14 13:45:18

标签: linux shell

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

我尝试使用ls -la,但无法显示更多信息(如所有权),也无法以递归方式显示路径下的所有内容。

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

2 个答案:

答案 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)

虽然您可以使用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和{{1 }}。要以数字形式获取访问权限,我建议使用%12g而不是普通%04m来强制前导零并使字段保持恒定宽度。

或者只需使用%m以固定格式获取人类可读输出:

find -ls

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