ディレクトリを並行して削除する以上のことをしたい場合に備えて、GNU parallel を使用して多くの並行処理を行うことができます。多くの場合、ディストリビューションの基本ユーティリティではないため、お気に入りのパッケージ マネージャーを使用してインストールする必要がある場合があります。 apt-get install parallel
.
しかし、その後、このようなクールなことを行うことができます。たとえば、4 つの並列プロセスを実行し、進行状況を表示し、ナグ通知を表示せず、それぞれ 5 秒、10 秒、15 秒、20 秒待機するスリープ コマンドを並行して実行するとします。
$ parallel -j 4 --progress --no-notice sleep ::: 5 10 15 20
Computers / CPU cores / Max jobs to run
1:local / 4 / 4
Computer:jobs running/jobs completed/%of started jobs/Average seconds to complete
local:0/4/100%/5.0s
あなたの例は次のように実行されます:
$ parallel --no-notice rm -rf ::: dir1 dir2 dir3
すばらしいチュートリアルを参照してください。
/media 内のいくつかのフォルダーをできるだけ早くクリーンアップする必要がありました。
次のコマンドは、約 5 分で 80 台のディスクのそれぞれから 9T のデータを削除することができました
$ sudo find /media -maxdepth 2 -name "data-8" -type d | while read folder; do eval "sudo rm -rf ${folder} &"; done
これにより、80 個の並列 rm -rf
がキックされました バックグラウンドで
コマンドをバックグラウンドで実行する
rm -rf dir &; rm -rf dir2 &;
構文
long_command with arguments > redirection &
コマンド出力をファイルにリダイレクトすることで、任意のメッセージをキャプチャできます。
このリンクは役に立ちます ==> http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO-3.html
編集:
質問のタイトルと与えられた例は、問題が非常に小さいという印象を与えますが、問題の深刻さを示す賞金が追加されています.
ファイルの性質を指定するとよいでしょう。ただし、並列実行として実装できる分割ベースの削除を提供しています。要件に基づいて以下のオプションを試すことができます。
find /yourpath/folder1 -size +1048576 -exec rm -f {} \; &
find /yourpath/folder2 -size +1048576 -exec rm -f {} \; &
ls -l /yourpath/folder1 | awk '{print $9}' | awk -F. '{print $(NF)}' |sort |uniq
のような結果が得られるかもしれません
.txt
.log
.tmp
.zip
ここで、拡張子に基づいてファイルを削除します
find yourpath/folder1 -name '*.txt' -exec rm {} \; &
find yourpath/folder1 -name '*.tmp' -exec rm {} \; &
find yourpath/folder1 -name '*.log' -exec rm {} \; &
find yourpath/folder2 -name '*.txt' -exec rm {} \; &
find yourpath/folder2 -name '*.tmp' -exec rm {} \; &
find yourpath/folder2 -name '*.log' -exec rm {} \; &
find yourpath/folder1 -mtime +5 -exec rm {} \;
または
find yourpath/folder2 -mtime +5 |xargs rm
find foldername -exec rm -rf {} \; &