我有一个 bash 脚本,可以并行启动多个 rsync 进程。我想限制同时子进程的数量,但不序列化整个脚本。
这是当前脚本的简化版本:
#!/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
应该做到这一点。