現在のフォルダ内のディレクトリを検索し、それをtarするコードがあります
find . -type d -maxdepth 1 -mindepth 1 -print -exec tar czf {}.tar.gz {} \;
フォルダーが 100 個あり、現在はフォルダーごとに処理しています。
5つのバッチを並列に実行することは可能ですか?
答え1
を使用するとxargs
、ある程度の並列処理を実現できます。
find . -type d -maxdepth 1 -mindepth 1 -print0 |
xargs -t0 -n 1 -P 5 -I XX tar czf XX.tar.gz XX
これは-P 5
、 によって開始される並列プロセスの数をxargs
5 に制限するフラグです。一方、 は、-n 1
一度に 1 つの入力行のみでユーティリティを実行するために使用されます。 では、ディレクトリ パスとなる入力行を、コマンド内の-I XX
文字列に置き換える必要があるとしています。XX
xargs
の呼び出しtar
が実行されると、それが出力されます。-t
これをオフにするには、削除します。
ディレクトリ パス名は、 から渡されfind
、-print0
によって受信されますxargs
(-0
つまり、\0
区切り文字として使用します)。これにより、特殊な名前も使用できるようになります。
指摘したようにこのサイトの他の場所の回答で:
操作のボトルネックはハード ドライブである可能性が高いことに注意してください。そのため、タスクを 2 つ以上のプロセスに分割したとしても、異なるドライブで操作しない限り、速度は上がりません。