GNU du
(つまり、組み込みでないLinuxまたはCygwin)では、この--exclude
オプションを使用して、一致させたくないファイルを除外できます。
du -s --exclude='*.html' /var/foo
*.pdf
ファイルを確実に照合する場合は、他の方法を使用してファイルを一覧du
表示する必要があります。少なくとも、引数ごとに1つの出力行と、オプション付きの総計が表示されます-c
。を呼び出しtail
て、最後の行を除くすべてを削除するか、sedを使用して「total」という単語を削除することもできます。その1つのディレクトリ内のファイルを列挙するには、シェルでワイルドカードを使用します。
du -sc /var/foo/*.pdf | tail -n1
du -sc /var/foo/*.pdf | sed -n '$s/\t.*//p'
サブディレクトリ内のファイルもトラバースする必要がある場合はfind
、を使用する**/
か、シェルがサポートしている場合はパターンを使用します。の場合**/
、bashでは最初にを実行しshopt -s extglob
、4.2までのバージョンのbashはディレクトリへのシンボリックリンクをトラバースすることに注意してください。zshでは、これはそのまま使用できます。
du -sc /var/foo/**/*.pdf | tail -n1
検索バージョンでさらに複雑になるのは、ファイルが多すぎる場合、コマンドラインの長さの制限を超えないように、複数回find
実行du
されることです。ワイルドカードメソッドを使用すると、それが発生するとエラーが発生します(「コマンドラインの長さの制限を超えました」)。次のコードは、改行を含む一致するファイル名がないことを前提としています。
find /var/foo -name '*.pdf' -exec du -sc {} + |
awk '$2 == "total" {total += $1} END {print total}'
du -sh /foo/*.pdf
ますか?