%E3%81%AB%E3%82%88%E3%82%8B%E3%83%87%E3%82%A3%E3%82%B9%E3%82%AF%E4%BD%BF%E7%94%A8%E9%87%8F%E3%81%AE%E3%83%95%E3%82%A3%E3%83%AB%E3%82%BF%E3%83%AA%E3%83%B3%E3%82%B0%E3%82%92%E8%A8%88%E7%AE%97%E3%81%99%E3%82%8B%E3%81%AB%E3%81%AF%E3%81%A9%E3%81%86%E3%81%99%E3%82%8C%E3%81%B0%E3%82%88%E3%81%84%E3%81%A7%E3%81%97%E3%82%87%E3%81%86%E3%81%8B%3F.png)
ディレクトリ内の一部のファイルによってのみ消費されるディスク容量を再帰的に計算するにはどうすればよいでしょうか?
答え1
find -iname '*.jpg' -print0 | du --files0-from=- -h -c | tail -1
-iname
大文字と小文字を区別せずに検索します-print0
NUL
改行の代わりに書き込む--files0-from=-
NUL
改行の代わりに読み取り、stdin
引数の代わりに読み取ります-h
結果を人間が読める形式で出力します(例:1K
の代わりに1024
)-c
合計を出力する(例23G
:)tail -1
個々のファイルサイズを省略し、合計のみを出力します。
答え2
とzsh
:
zmodload zsh/stat
stat -LA blocks +blocks -- **/*.jpg(NDoN)
print $(( (${(j[+])blocks} + 0) * 512 ))
名前が で終わるすべてのファイル.jpg
(修飾子付きの隠しファイルを含むD
) の累積ディスク使用量を出力します。同じファイルへのハード リンクが複数ある場合、それらのディスク使用量は複数回カウントされることに注意してください (これはほとんどのdu
実装とは異なります)。
ファイルの一部がディレクトリでは、ディレクトリ ファイル自体のディスク使用量のみがカウントされ、それらのディレクトリをトラバース中に見つかったファイルのディスク使用量はカウントされません ( とのもう 1 つの違いdu
)。