解決策
オプション -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を実行しますfindの結果ごとに 1 回 .{}の代わりに結果のパス名が渡されます .$ 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) を引き起こしました null で区切られたファイル名を読み取ります。改行文字とは異なり、ヌル文字はファイル名に表示されない可能性があるため、出力は明確です。
du(1) のオプションについて詳しく知るには と find(1) 、それぞれのマンページを参照してください:
$ man du
$ man find
これを試してください:
du -c `find . -name 'flibble*' -ctime +90` | tail -1
元のコマンドは du に 1 つの引数を与えてから、すべての引数を通過するまでそれを実行します。このように、すべての引数を一度に与えてから、個別のサイズを切り捨て、合計のみを残すだけです。必要に応じて、パイプとテールを削除して、各ファイルのサイズを表示できます。
これを試すことができます:
find . -name 'flibble*' -ctime +90 -exec du -ch {} + | grep total