51

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

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を含むソリューションを使用するつもりはありません。

4

7 に答える 7

75

このコマンドduは、ディスク使用量について通知します。特定のケースの使用例:

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

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

于 2009-07-15T21:43:53.727 に答える
15

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

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

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

于 2009-07-15T21:45:31.693 に答える
8

GNU findで、

 find /path -name "offender" -printf "%s\n" | awk '{t+=$1}END{print t}'
于 2009-07-16T13:00:10.590 に答える
5

上記のジェイソンのコメントを回答のステータスに昇格させたいと思います。これは最もニーモニックであると信じているためです(ただし、ファイルリストを指定する必要がある場合は、最も一般的ではありません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
于 2013-02-02T19:40:11.090 に答える
1

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

find . -type f -mtime -30 -exec ls -l {} \; | awk '{ s+=$5 } END { print s }'
于 2011-01-08T15:38:26.803 に答える
1

最近、私は同じ(ほぼ)問題に直面し、この解決策を思いつきました。

find $path -type f -printf '%s '

ファイルサイズがバイト単位で表示されますman find

-printf format
    True; print format on the standard output, interpreting `\' escapes and `%' directives.  Field widths and precisions can be spec‐
    ified as with the `printf' C function.  Please note that many of the fields are printed as %s rather than %d, and this  may  mean
    that  flags  don't  work as you might expect.  This also means that the `-' flag does work (it forces fields to be left-aligned).
    Unlike -print, -printf does not add a newline at the end of the string.
    ...
    %s  File's size in bytes.
    ...

そして、合計を取得するために私はこれを使用しました:

echo $[ $(find $path -type f -printf %s+)0] #b
echo $[($(find $path -type f -printf %s+)0)/1024] #Kb
echo $[($(find $path -type f -printf %s+)0)/1024/1024] #Mb
echo $[($(find $path -type f -printf %s+)0)/1024/1024/1024] #Gb
于 2020-07-21T13:53:54.447 に答える
-1

ls -lまた、それらのサイズを見つけて、サイズawkを抽出するために使用することもできます。

find /rapidly_shrinking_drive/ -name "offender1" -mtime -1 | ls -l | awk '{print $5}' | sum
于 2009-07-15T21:48:15.493 に答える