find コマンドからのファイルを並列バッチで使用する

find コマンドからのファイルを並列バッチで使用する

現在のフォルダ内のディレクトリを検索し、それを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、 によって開始される並列プロセスの数をxargs5 に制限するフラグです。一方、 は、-n 1一度に 1 つの入力行のみでユーティリティを実行するために使用されます。 では、ディレクトリ パスとなる入力行を、コマンド内の-I XX文字列に置き換える必要があるとしています。XX

xargsの呼び出しtarが実行されると、それが出力されます。-tこれをオフにするには、削除します。

ディレクトリ パス名は、 から渡されfind-print0によって受信されますxargs(-0つまり、\0区切り文字として使用します)。これにより、特殊な名前も使用できるようになります。


指摘したようにこのサイトの他の場所の回答で:

操作のボトルネックはハード ドライブである可能性が高いことに注意してください。そのため、タスクを 2 つ以上のプロセスに分割したとしても、異なるドライブで操作しない限り、速度は上がりません。

関連情報