解決
オプション-c
(または--total
)をdu(1)
に指定すると、総計を生成するように指示できます。の実装がdu(1)
これらのオプションのいずれかをサポートしている場合は、次のコマンドを使用して目的の効果を得ることができます。
$ find . -name 'flibble*' -ctime +90 -exec du -shc {} +
編集:ファイルの数がシステムで許可されているパラメータの最大数を超えたfind
場合でも、command
複数回実行される可能性があることに注意してください。の一部の実装ではdu(1)
、ファイルからのファイル名の読み取りもサポートされています。これは、前述の制限を受けません。
$ find -name 'flibble*' -ctime +90 -print0 > filenames
$ du -shc --files0-from=filenames
説明
意味論の違い-exec command {} \;
とは、-exec command {} +
以下のとおりであります:
command {} \;
のcommand
結果ごとに1回実行されますfind
。結果のパス名がの代わりに渡され{}
ます。
$ touch 1 2 3
$ find 1 2 3 -maxdepth 0 -exec echo {} \;
1
2
3
command {} +
command
すべての結果が取得されたときに実行されます。の代わりに結果のパス名が渡され{}
ます。
$ touch 1 2 3
$ find 1 2 3 -maxdepth 0 -exec echo {} +
1 2 3
この-print0
オプションによりfind(1)
、検出されたファイル名がヌル文字で区切られた標準出力に出力され、--files0-from
オプションによりdu(1)
、ヌルで区切られたファイル名が読み取られます。改行文字とは異なり、ヌル文字はファイル名に表示されない可能性があるため、出力は明確です。
du(1)
およびのオプションの詳細についてはfind(1)
、それぞれのマンページを参照してください。
$ man du
$ man find