web-dev-qa-db-ja.com

検索を使用して、1000日以上経過したファイルごとに使用済みディスク容量の合計を計算します

システムには4年以上のデータがあります。 2年前のファイルとディレクトリを新しいリポジトリに移動する必要があります。 2017年1月から現在までのデータの数TBのデータの数を知るために私たちの要件が必要です。2.Exclude個人用フォルダーコマンドを見つけようとしましたが、うまくいきませんでした。

find . -type f -mtime +1010 ! -path "./home/01_Personal Folder*" -printf '%s\n' \ 
| awk '{a+=$1;} END {printf "%.1f GB\n", a/2**30;}'
3

次のようになります。

find . ! -path "./home/01_Personal Folder*" -type f -mtime +1000 -exec du -ch {} + | grep total

に基づく回答: ディレクトリブランチ内の特定のファイルの合計サイズを検索

シェルの説明 コマンド。

2
Paulo Tomé
...
37M     total
29M     total
42M     total
43M     total
36M     total

real    0m1.271s
user    0m0.561s
sys     0m1.278s

私が得るものです:

time find ~/sda1 -type f -exec du -ch {} +|grep total

だから今私は合計を合計するためのツールが必要です! (これは-exec...+オーバーフローです)

しかし、

time find ~/sda1 -type f -printf "%s\n" | awk '{a+=$1;} END {print a;}'

10483650002

real    0m0.550s
user    0m0.251s
sys     0m0.349s

そして:

]# time du ~/sda1 -sh
11G     /.../sda1

real    0m0.458s
user    0m0.116s
sys     0m0.340s

私はそれを素晴らしく、速く得る。


いずれにしても、findがそれらのファイルをduingしている場合、各ファイルをstatするのは非効率であり、サイズを無料で与えることができます。 find ... -exec du {} +を使用すると、duは-c "総計"の計算機に分解されます。

もちろん、ファイルサイズ(バイト単位)とディスク使用量(ブロック単位)には多少の違いがあります。


ここでは、元の `find ... -printf"%s\n "を示しています。 awk '{...} END {...}'は機能します:

]# find ~ -maxdepth 1 -printf "%s\n" | awk '{a+=$1;} END {print a;}'
1093990
]# find ~ -maxdepth 1 -printf "%s\n" | awk '{a+=$1;} END {printf "%x\n",a;}'
10b166

これは私の初めてのawkです。

私はこれを~ -maxdepth 1でテストしましたが、ラウンド数が気になり、OPの最後にその「GB」のものがあったので、10 ** 6 = 16x64Kになるまで遊んでいました。

1
rastafile