我想列出硬碟中的所有文件,包括大小、上次修改日期和絕對路徑。
想法格式:
[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
's-printf
操作直接輸出這些屬性,例如
find "$PWD" -printf '%s\t%Tx\t%h\t%P\n'
%s
:檔案大小(以位元組為單位)。%Tx
:文件的最後修改時間,以區域設定的日期表示形式%h
:檔案名稱的前導目錄%P
:檔案名稱以及在其下發現該檔案的命令列參數的名稱已被刪除。
目錄路徑 ( %h
) 是相對於呼叫命令的命令列路徑參數列印的find
:透過使用 指定工作目錄$PWD
,它變成絕對路徑。
答案2
您可以使用-printf
find 中的選項:
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