並列に実行される子プロセスの数を制限する簡単な方法はありますか?

並列に実行される子プロセスの数を制限する簡単な方法はありますか?

複数のrsyncプロセスを並列に開始するbashスクリプトがあります。同時サブプロセスの数を制限したいが、スクリプト全体を直列化したくない。

以下は、現在のスクリプトの単純化されたバージョンです。

#!/bin/bash
(
  flock -n 200 || exit 0
  {
    for f in $(ssh $1 ls /var/images/)
    do
      rsync … &
    done
    wait
  } &> /var/log/my.log
) 200>/var/lock/my.lockfile

私はxargs信じる--max-procs 解決策になることができますしかし、私のスクリプトと統合する方法がわかりません。これは可能ですか、それとも良い方法がありますか?

答え1

ssh "$1" "find /var/images -type f -print0" |
  xargs --null --replace --max-procs=X rsync "${1}:{}" /my/destination

これを行う必要があります。

関連情報