私は何十億ものファイルがすべてJPEGファイル形式で含まれている30TBのディレクトリを持っています。次のように各フォルダのファイルを削除します。
sudo rm -rf bolands-mills-mhcptz
コマンドが実行され、動作しているかどうかに関係なく、何も表示されません。
ファイルを削除するのか、コマンドの現在の状態がどのようなものかを知りたいです。
答え1
削除したファイルごとに1行ずつrm -v
印刷できますrm
。これにより、rm
ファイルの削除が実際に機能していることを確認できます。ただし、何十億ものファイルがある場合は、rm
そのファイルがまだ機能していることがわかります。どのくらいのファイルが削除されたか、どれだけ残っているのかわかりません。
このツールはpv
進行状況を予測するのに役立ちます。
http://www.ivarch.com/programs/pv.shtml
rm
サンプル出力を使用して呼び出す方法は次のとおりです。pv
$ rm -rv dirname | pv -l -s 1000 > logfile
562 0:00:07 [79,8 /s] [====================> ] 56% ETA 0:00:05
pv
この人工的な例では、ファイルがあると言いました1000
。出力にはpv
562が削除され、経過時間は7秒、予想完了時間は5秒です。
いくつかの説明:
pv -l
pv
バイトではなく改行文字で計算pv -s number
pv
総額がいくらであるかを教えてください。logfile
最終リダイレクトはきちんとした出力のためです。それ以外の場合、ステータス行はpv
の出力と混同されますrm -v
。ボーナス:削除内容のログファイルが提供されます。ただし、ファイルが非常に大きくなる可能性があることに注意してください。/dev/null
ログが必要ない場合は、リダイレクトすることもできます。
ファイル数を取得するには、次のコマンドを使用できます。
$ find dirname | wc -l
何十億ものファイルがある場合でも、時間がかかることがあります。pv
ここでどれだけ計算されたかを確認することもできます。
$ find dirname | pv -l | wc -l
278k 0:00:04 [56,8k/s] [ <=> ]
278044
ここでは278k個のファイルを計算するのに4秒かかったという。 ()末尾の正確な数はの278044
出力ですwc -l
。
カウントを待たない場合は、ファイル数を推測するか、pv
直接使用できます。
$ rm -rv dirname | pv -l > logfile
これにより、達成したい操作を推定することはできませんが、少なくとも削除されたファイルの数を確認できます。/dev/null
ログファイルが不要な場合にリダイレクトしてください。
残響:
- 本当に必要ですか
sudo
? - 通常
rm -r
、再帰的に削除すれば十分です。不要rm -f
。
答え2
確認するレスマナの答え、それは私のものよりはるかに優れています。特に、pv
代わりに指定すると、生の沈黙よりもはるかに時間がかからない最後の例です。rm
/dev/null
logfile
そのオプションをサポートしていると仮定するとrm
(Linuxを実行しているためサポートされます)、以下を使用して詳細モードで実行できます-v
。
sudo rm -rfv bolands-mills-mhcptz
多くのコメントが指摘したように、端末で生成され表示される出力の量が多いため、速度が非常に遅くなる可能性があります。出力をファイルにリダイレクトできます。
sudo rm -rfv bolands-mills-mhcptz > rm-trace.txt
そしてサイズを観察してみてくださいrm-trace.txt
。
答え3
別のオプションは、ファイルシステムのファイル数が減少することを観察することです。別の端末で次を実行します。
watch df -ih pathname
rm
進むにつれて、使用されるinodeの数が減少します。 (たとえば、ツリーはcp -al
複数のファイル(およびディレクトリ)の削除の進行状況を追跡します。使用されたスペースは追跡されませdf
ん。-i
また、実行iostat -x 4
すると、1秒あたりのI / O操作(およびkiB / s、しかしこれは純粋なメタデータI / Oとの関連性が低い)を見ることもできます。
rm
現在処理中のファイルが何であるか疑問に思っている場合は、そのファイルに添付して端末にシステムコールが表示されるかどうかをstrace
確認(およびgetdents)できます。unlink()
たとえばsudo strace -p $(pidof rm)
。^c
straceを中断することなく分離できます。rm
rm -r
削除したいツリーにディレクトリを変更したことを忘れました。その場合は見てください/proc/<PID>/cwd
。 fdディレクトリを開くことが多いので、そのディレクトリを調べて、現在のプロセスが何を見ているのかを/proc/<PID>/fd
確認できます。rm
答え4
あなたができることの1つは、バックグラウンドでプロセスを開始してから(出力がないため遅くならない)、単純なrm
(a)コマンドを使用してフォアグラウンドで監視することです。
pax> ( D=/path/to/dir ; rm -rf $D & while true ; do
...> if [[ -d $D ]] ; then
...> echo "$(find $D | wc -l) items left"
...> else
...> echo "No items left"
...> break
...> fi
...> sleep 5
...> done )
27912 items left
224 items left
No items left
pax> _
コンボfind/wc
は、必要な単位を提供する任意のツールと交換できます。
(井戸、比較的核物理学、リーマン仮説、またはクリスマスに妻に何を買うかと比較して簡単です:-)