如何使用‘查找’列出硬盘中的所有文件?

如何使用‘查找’列出硬盘中的所有文件?

我想列出硬盘中的所有文件,包括大小、上次修改日期和绝对路径。

创意格式:

[file size] [last modified date] [absolute path] [ filename] 

我试过:

ls -lhR | awk -v PWD=$PWD '{printf("%4s %4s %2s %5s %s/%s\n", $5, $6, $7, $8, PWD, $9); }' >> /tmp/report.list 

它运行完美,直到它碰到一些中间有空格的文件/目录......所以我尝试:

find . -name "*" -exec du -sh {} \; -exec date -r {} \; -exec echo " " \; >> /tmp/report.list

但是输出似乎分为 3 行而不是 2 行,而且打印的路径不是文件的绝对路径。

我应该怎么办?

答案1

您可以使用find-printf操作直接输出这些属性,例如

find "$PWD" -printf '%s\t%Tx\t%h\t%P\n'
  • %s:文件的大小(以字节为单位)。
  • %Tx:文件的最后修改时间,以本地日期表示
  • %h:文件名的前导目录
  • %P:文件的名称以及发现该文件的命令行参数的名称已被删除。

目录路径(%h)是相对于调用命令的命令行路径参数打印的find:通过使用指定工作目录$PWD,它就变成绝对路径。

答案2

您可以-printf在查找中使用以下选项:

find / -type "f" -printf "%s\t%TY-%Tm-%Td\t%p\n" > file.txt

这将生成以下格式的文件:

[大小(字节)]TAB[上次修改日期(YYYY-mm-dd 格式)]TAB[FULLPATH]

它将在完整的文件结构上运行。

\t如果您不想使用制表符分隔,请将每个替换为空格。使用您可以在中找到该选项man find的其他格式选项。-printffind

相关内容