システムには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;}'
次のようになります。
find . ! -path "./home/01_Personal Folder*" -type f -mtime +1000 -exec du -ch {} + | grep total
に基づく回答: ディレクトリブランチ内の特定のファイルの合計サイズを検索
シェルの説明 コマンド。
...
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がそれらのファイルをdu
ingしている場合、各ファイルを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になるまで遊んでいました。