"du"コマンドで特定の拡張子のファイルサイズ全体を表示する方法

私のディレクトリには何百ものpdfファイルとhtmlファイルがあります。 PDFファイルのフルサイズを知りたいです。

コマンドを使用すると、du -ch /var/fooファイルサイズ全体を表示できますが、フルサイズの最後の行のみが必要です。

ディレクトリにpdfファイルのみが含まれている場合は、このオプションを使用できますが、-s今回はそのオプションを使用できません。

特定のファイル形式のフルサイズのみを取得する方法は?

ベストアンサー1

GNU du(つまり、組み込みのLinuxまたはCygwin)では、この--excludeオプションを使用して一致させたくないファイルを除外できます。

du -s --exclude='*.html' /var/foo

ファイルを積極的に一致させるには、*.pdf別の方法を使用してファイルを一覧表示し、du各引数に1つ以上の出力行とオプションを含む合計を表示する必要があります-c。呼び出して、tail最後の行を除くすべてのエントリを削除するか、sedを使用して「total」という単語を削除できます。このディレクトリのファイルを列挙するには、シェルでワイルドカード文字を使用します。

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}'

おすすめ記事