「find」を使用してハードディスク内のすべてのファイルを一覧表示するにはどうすればいいですか?

「find」を使用してハードディスク内のすべてのファイルを一覧表示するにはどうすればいいですか?

サイズ、最終更新日、絶対パスを含む HDD 内のすべてのファイルを一覧表示したいと思います。

アイデアのフォーマット:

[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

しかし、出力は 2 行ではなく 3 行に分かれているようで、また、印刷されたパスはファイルへの絶対パスではありません。

どうすればいいですか?

答え1

find-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

関連情報