web-dev-qa-db-ja.com

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

現在のフォルダでdirを検索し、それをtarするためのこのコードがあります

find . -type d -maxdepth 1 -mindepth 1 -print -exec tar czf {}.tar.gz {} \;

私は何百ものフォルダを持っています、そして現在それは一つずつフォルダをします。

5つのバッチで並行して実行できる可能性はありますか

2
user3214546

xargsを使用すると、ある程度の並列処理を実現できます。

find . -type d -maxdepth 1 -mindepth 1 -print0 |
xargs -t0 -n 1 -P 5 -I XX tar czf XX.tar.gz XX

xargsによって開始される並列プロセスの数を5つに制限するのは-P 5フラグですが、-n 1は、一度に1つの入力行でのみユーティリティを実行するために使用されます。 -I XXを使用すると、コマンドの文字列XXの代わりに、ディレクトリパスとなる入力行を使用する必要があると言います。

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

ディレクトリパス名は、findから-print0で渡され、xargs-0で受信します(つまり、\0を区切り文字として使用します)。 。


指摘されているように このサイトの他の場所での回答で

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

1
Kusalananda