linux - 在目录下列出所有内容,并提供详细信息(Linux Shell命令)

标签 linux shell

我有兴趣列出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可以看到以下可用选项:
%以八进制表示的访问权限(注意“35;”和“0”printf标志)
%人类可读形式的访问权
%b分配的块数(请参阅%b)
%b由%b报告的每个块的字节大小
%C SELinux安全上下文字符串
%D十进制设备号
%十六进制的D设备号
%F原始模式(十六进制)
%F文件类型
%G所有者的组ID
%G业主集团名称
%H硬链接数
%索引编号
%M安装点
%n文件名
%n引用的文件名,带有取消引用if符号链接
%o最佳I/O传输大小提示
%s总大小(字节)
%t十六进制主设备类型,用于字符/块设备专用
文件夹
%t十六进制小设备类型,用于字符/块设备专用
文件夹
%所有者的用户ID
%u所有者用户名
%文件出生时间,人类可读;如果未知
%W文件出生时间,从纪元开始的秒数;如果未知,则为0
%最后一次访问时间,可读
%X上次访问的时间,自纪元以来的秒数
%上次数据修改的Y时间,可读
%上次数据修改的y时间,自epoch以来的秒数
%Z上次状态更改的时间,可读
%Z上次状态更改的时间,自纪元以来的秒数
编辑:ilkkachu's answer确实提供了与stat相同的基本选项来显示,而不使用单独的stat命令,因此除非您希望显示仅在stat中找到的更高级选项,否则应首选它。

关于linux - 在目录下列出所有内容,并提供详细信息(Linux Shell命令),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47814863/

相关文章:

linux - 无法在 CentOS 中使用 docker run 命令

linux - 如何使用 wget 下拉域列表并使用 grep 扫描它们

linux - Bash 脚本语法错误 "do"?

bash - 删除不在包含目录名称列表的文件中的目录

linux - 在 Linux shell 脚本中处理输入确认

linux - 在 bash 中转换日期格式

linux - 如何在Kali Linux中的Wireshark中更改选项的颜色?

c++ - 如何使用 va_list 解决错误?

shell - 检查程序是否正在使用 bash shell 脚本运行?

Windows 批处理 : analogue for `timeout` command