GNU/Linux >> Linux の 問題 >  >> Linux

複数のフォルダを並行して削除するには?

ディレクトリを並行して削除する以上のことをしたい場合に備えて、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 {} \; &
    

  • 変更時刻によるファイルの削除
  • 以下のコマンドは、5 日以上前のファイルを削除しようとします。
    find yourpath/folder1 -mtime +5 -exec rm {} \;
    

    または

    find yourpath/folder2 -mtime +5 |xargs rm 
    

  • フォルダとそのファイルを含むサブフォルダを削除します
  • find foldername -exec rm -rf {} \; &
    


    Linux
    1. ファイル内の複数の文字列を見つける方法は??

    2. Unix で空のディレクトリとファイルを見つけて削除する方法

    3. Linuxターミナルから正規表現を使用してフォルダーを削除するにはどうすればよいですか

    1. Linux でこの名前のファイルを削除する方法:-]???????q

    2. 検索を使用するときに複数のコマンドを実行するにはどうすればよいですか?

    3. bashコマンドを使用してフォルダを一覧表示するには?

    1. 検索を使用して複数のファイルの名前を変更するにはどうすればよいですか?

    2. Linux で空のディレクトリとファイルを見つけて削除する方法

    3. 変な名前のファイルを削除するには?