サイズ、最終更新日、絶対パスを含む 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
-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