web-dev-qa-db-ja.com

「検索」で選択されたファイルのグループの合計サイズ

たとえば、私が思ったよりも速くいっぱいになる大きなファイルシステムがあります。だから私は追加されているものを探します:

find /rapidly_shrinking_drive/ -type f -mtime -1 -ls | less

そして、私はまあ、たくさんのものを見つけます。 6-7タイプの数千のファイル。タイプを選び出して数えることができます:

find /rapidly_shrinking_drive/ -name "*offender1*" -mtime -1 -ls | wc -l

しかし、私が本当に望んでいるのは、これらのファイルのディスク上の合計サイズを取得できることです。

find /rapidly_shrinking_drive/ -name "*offender1*" -mtime -1 | howmuchspace

私は、Perlのワンライナーを利用できます。誰かが持っている場合は、マルチラインスクリプトやFile :: Findを使用するソリューションは使用しません。

42
Ed Hyer

コマンド du は、ディスクの使用状況を示します。特定のケースの使用例:

find rapidly_shrinking_drive/ -name "offender1" -mtime -1 -print0 | du --files0-from=- -hc | tail -n1

(以前私はdu -hs、しかし私のマシンではfindの入力を無視しているように見え、代わりにcwdのサイズを要約します。)

65
Stephan202

くそー、Stephan202は正しいです。 du -s(要約)については考えていなかったので、代わりにawkを使用しました。

find rapidly_shrinking_drive/ -name "offender1" -mtime -1 | du | awk '{total+=$1} END{print total}'

私は他の答えが好きですが、それはほぼ間違いなくより効率的です。

14
pix0r

GNU find、

 find /path -name "offender" -printf "%s\n" | awk '{t+=$1}END{print t}'
7
ghostdog74

上記のジェイソンのコメントを回答のステータスに昇格させたいのは、それが最もニーモニックであると考えているからです(ただし、findでファイルリストを指定する必要がある場合は、最も一般的ではありません)。

$ du -hs *.nc
6.1M  foo.nc
280K  foo_region_N2O.nc
8.0K  foo_region_PS.nc
844K  foo_region_xyz.nc
844K  foo_region_z.nc
37M   ETOPO1_Ice_g_gmt4.grd_region_zS.nc
$ du -ch *.nc | tail -n 1
45M total
$ du -cb *.nc | tail -n 1
47033368  total
3
TomRoche

私はこのコマンドをすべて試しましたが、運はありませんでした。だから私は私に答えを与えるこれを見つけました:

find . -type f -mtime -30 -exec ls -l {} \; | awk '{ s+=$5 } END { print s }'
1
Vlad Savitsky