我想列出硬盘中的所有文件,包括大小、上次修改日期和绝对路径。
创意格式:
[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
的其他格式选项。-printf
find