最大X個のコマンドを並列に実行

最大X個のコマンドを並列に実行

私は次のようなものを実行しています:

find . -maxdepth 1 -type f -note -iname "*.gpg" | sort | while read file ; do
    echo "Encrypting $file..."
    gpg --trust-model always --recipient "[email protected]" --output "$file.gpg" \
        --encrypt "$file" && rm "$file" 
done

これはうまくいきますが、GPGは暗号化操作にマルチコアを使用するように最適化されていないようです。私が暗号化しているファイルはサイズが2GB程度ですが、ファイルがかなり多いです。 Xタスクを並列に実行してファイルを暗号化してから削除できるようにしたいです。たとえば、一度に8つのタスクを制限するにはどうすればよいですか?

ベストアンサー1

インストールするとGNUパラレル達成したいことを簡単に実行できるツール:

$ find . -maxdepth 1 -type f -note -iname "*.gpg" | sort | \
      parallel --gnu -j 8 --workdir $PWD '                 \
         echo "Encrypting {}...";                          \
         gpg --trust-model always                          \
           --recipient "[email protected]" --output "{}.gpg"   \
           --encrypt "{}" && rm "{}"                       \
      '

詳細

上記のコードは出力を取得してfindとして実行parallelし、一度に8つずつ実行します。{}渡されるファイル名はどこにでも表示され、この場所のfindファイル名を上書きします。{}

引用する

おすすめ記事