私は266778サブフォルダーを含むフォルダーを持っています。どうすれば削除できますか?
私が試してみました
cd ~/.local/share/Trash/
Sudo rm -rf *
時間がかかります。 1分25秒のリアルタイムと0.072秒のユーザー時間の後、2500個のフォルダーのみが削除されました。この方法では、このフォルダを削除するのに2時間以上かかります。
このフォルダを削除するより速い方法はありますか?ユーザーの時間とリアルタイムの間にこのような大きな違いがあるのはなぜですか?
real 1m25.474s
user 0m0.072s
sys 0m28.142s
Linux 2.6.32(Ubuntu 10.04.4 LTS)を使用しています。
「find」のバージョンが-deleteサブコマンドを実装している場合は、次を試すことができます
find directory -delete
この場合:
find ~/.local/share/Trash/ -delete
Rmなどの一部のコマンドは、ほとんどの作業をカーネルで実行します。正確には、ファイルシステムルーチン内。システムコールの実行に費やされた時間はそのように計算されるため、「rm」コマンドが長時間実行されても、ユーザーランドではあまり機能しません。システムコールはほとんどの機能を実行します。
fastの定義によって異なります。すでにここにある答えは、ファイルシステムからディレクトリを実際に削除するための良い解決策を提供しますが、本当に必要なのは、ディレクトリをできるだけ速く解放することですnameは、同じファイルシステムでの名前変更が瞬時に行われます。
{ mv directory directory.gone && rm -rf directory.gone; } &
実際には、実際の削除を高速化していないため、これは不正行為ですが、実際には非常に便利です。このトリックを常に使用するため、遅い削除操作を待つ必要がありません。
ローカルのrm
実装が壊れていない限り、もちろん_rm -rf directory
_または_rm -rf *
_が最速の方法です。
find
を使用しても利点はありません。
これが速いか遅いかは、主にファイルシステムとOSの実装に依存します。したがって、質問は不適切なようです。
Solaris上のUFSおよびZFSは、この種のタスクで非常に高速であることが知られています。これは、両方のファイルシステム実装にunlink()
およびrmdir()
呼び出しが関連オブジェクトは合計でより時間がかかります。
カーネルでのバックグラウンド削除の遅延により、ディレクトリの更新も高速に実行でき、これにより操作全体の速度が向上します。
これは部分的な答えにすぎず、コマンドが返す3つの値に光を当てています。 time(1)
manpage から引用:
(i)呼び出しから終了までの経過実時間、(ii)ユーザーCPU時間(_
tms_utime
_の_tms_cutime
_値と_struct tms
_値の合計times(2)
)、および(iii)システムCPU時間(_tms_stime
_の_tms_cstime
_および_struct tms
_値の合計times(2)
)。」