私のディレクトリには何百もの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}'
答え2
シェルにファイルを拡張させる:
$ mkdir foo
$ echo "abc" > foo/1.pdf
$ echo "abcd" > foo/2.pdf
$ echo "abcd" > foo/3.html
$ du -ch foo/*.pdf
4,0K foo/1.pdf
4,0K foo/2.pdf
8,0K total
ただし、見てわかるように、これはファイルサイズが最初に作成されたときよりも約1000倍大きくなったことを示しています。より良いオプションは、次の-b
オプションを使用することです。
$ du -cbh foo/*.pdf
4 foo/1.pdf
5 foo/2.pdf
9 total
大きなファイルサイズはまだ人間が読める形式で表示されます173K
。
答え3
"find"コマンドを使用すると、この質問に対する回答で見つけることができる次のような結果が得られます。
答え4
GNUを使用しfind
て、次の操作を行いますdu
。
LC_ALL=C find . -iname '*.pdf' -type f -print0 |
du -ch --files0-from=- |
tail -n 1
名前が(、...).pdf
またはその他のバリアントで終わるすべての一般ファイルの累積ディスク使用量。.PDF
.pdF
ディスク使用量(たとえば、すべてのファイルから読み取ることができるデータ量)の代わりにファイルサイズの合計(同じファイルに対するすべてのハードリンク計算)を表示するには、にオプションを追加するか、代わりにを--count-links
使用--apparent-size
できdu
ます。 (ヒント通り)。 PDFファイルのシンボリックリンク数を計算するには、このオプションを変更して追加します。du -lbch
du -ch
-b
--apparent-size
-type
-xtype
--dereference-args
du