如何使用「尋找」列出硬碟中的所有檔案?

如何使用「尋找」列出硬碟中的所有檔案?

我想列出硬碟中的所有文件,包括大小、上次修改日期和絕對路徑。

想法格式:

[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

您可以使用-printffind 中的選項:

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

這會產生一個格式如下的檔案:

[大小以位元組為單位]TAB[最後修改日期,格式為 YYYY-mm-dd]TAB[FULLPATH]

它將在完整的文件結構上運行。

\t如果您不希望用製表符分隔,請將每個值替換為空格。使用您可以找到該選項的man find其他格式選項。-printffind

相關內容