GNU/Linux >> Linux の 問題 >  >> Linux

ファイルを見つけてそのサイズを合計するにはどうすればよいですか?

解決策

オプション -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

Linux
  1. MySQL、PHP、Apacheの設定ファイルを見つける方法

  2. LinuxでSUIDおよびSGID権限を持つファイルを検索する方法

  3. Unix で空のディレクトリとファイルを見つけて削除する方法

  1. Linux で空のディレクトリとファイルを見つけて削除する方法

  2. ls を使用してディレクトリとその合計サイズを一覧表示する

  3. Linuxで隠しファイルをchmodおよびchownする方法は?

  1. ディレクトリとサブディレクトリ内のファイル数を見つける方法

  2. サイズと拡張子でファイルを検索する方法は?

  3. ファイルを検索してコピーする