回答:
ディレクトリを削除できない場合は、常に検索を使用できます。
find . -maxdepth 1 -type f -exec rm -f {} \;
これにより、現在のディレクトリ内のすべてのファイルが削除され、現在のディレクトリのみが削除されます(サブディレクトリは削除されません)。
find dir/to/delete -delete
生成しませんrm
)。
find dir/to/delete -type f -delete
見つける。-maxdepth 1 -type f -exec rm -f {} \;
時間がかかりすぎます(ファイルごとにrmの1つのexec)。
これははるかに効率的です。
見つける。-maxdepth 1 -type f -print0 | xargs -r0 rm -f
できるだけ多くのファイル名をrmの引数として取り、次のファイル名のロードでrmを実行します... rmが2回または3回しか呼び出されないことがあります。
ionice
直前に追加rm
することをお勧めします。
これらは両方とも問題を回避します。ここで各テクニックのそれぞれのパフォーマンスの分析があります。
find . -name WHATEVER -exec rm -rf {} \;
または
ls WHATEVER | xargs rm -rf
この問題は、bashがディレクトリ内のすべての単一項目で「*」を展開することに起因します。どちらのソリューションも、代わりに各ファイルを順番に処理します。
find . -print0 | xargs -0 rm
)。
ls *
」を実行しており、「*
」は、シェルが長すぎると不平を言っている引数リストに展開します。ls .
代わりに" "を実行します(または、1つ上のディレクトリレベルに移動して " ls [dirname]
" を実行します)。
1つのレベルをバックアップすることでこれを行うことができました。
cd ..
実行中:
rm directory name -rf
そして、ディレクトリを再作成します。
これらのfind呼び出しはすべて非常に優れていますが、急いでいるときに必要な命名法を正確に覚えていることはめったにありません。代わりにlsを使用します。誰かが言及したように、ls。動作しますが、私は次のようにls -1を好む
ls -1 | xargs -n 100 rm -rf
-n xxxの数字は、最大値を超えると自動修正される(size-maxを超える場合; -sを参照)か、アプリのargs-maxを超える場合は通常明らか。
grepは、大きなディレクトリ内のファイルのサブセットのみを削除し、何らかの理由でfindを使用したくない場合に、このチェーンの途中に挿入すると便利です。
この回答は、ls、xargsなどにGnuコアユーティリティを使用していることを前提としています。
これは、システムの応答性を維持する必要がある場合に大量のファイルを削除するためのバージョンです。
これは、小さなバッチ(デフォルトでは100ファイル)で作業を発行し、他のジョブが完了するまで少し待つことで機能します。
ext3の1つのディレクトリから50万以上のファイルを削除するために見事に働きました。少しのボーナスとして行われた割合を印刷します
noOfFiles=`ls -U | wc -l`
n=0
while (ls -U | tail -n 100 | xargs rm -f); do
n=$((n+100));
sync;
echo -en "$((n*100/noOfFiles))%, ($n of $noOfFiles)\r";
sleep 5;
done
「長すぎる引数」または「メモリを割り当てられない」エラーを解決します
これは、セッションフォルダー内の220,000以上のファイルに対してトリックを行いました。
利点:ファイルの削除をすぐに開始します
cd path / to / folder
ls -f | xargs rm -f -v
削除するファイルのスクリーンショットをクリックします - (15分以内にすべてのファイルを削除しました)
-f (lsの後)事前ソートを行わない
-v (rmの後)は、各ファイルが削除されたものとして表示します
-f (rmの後)書き込み保護されたファイルでプロンプトなしで強制的に通過します。
ヒント:ファイルを削除しようとしているときに追加の自動生成ファイルが追加されないように、最初にフォルダーの名前を変更します(元のセッションはsession_oldに変更)。私の場合のように自動的に元のディレクトリが作成されない場合は、元のディレクトリを手動で再作成できます