使用 GNU Parallel scp 大文件,按主机分块

使用 GNU Parallel scp 大文件,按主机分块

我正在使用 Ansible 在多个节点上设置一些配置,作为此设置的一部分,我需要将一个大文件拆分为n行并将每个部分复制到远程文件,而不创建每个块的本地副本(如 bash分裂命令可以做到)。默认情况下,Ansible 无法做到这一点(或者我只是还没有找到如何做到这一点),所以我决定使用 GNU Parallel。我发现这里从 stdin 复制可以很容易地像这样完成:

~$ echo "Lots of data" | ssh [email protected] 'cat > big.txt'

但我想同时对多个主机执行此操作!因此,这里有一个示例输入:

~$ cat hosts.txt
1.1.1.1
2.2.2.2
3.3.3.3

~$ cat data.txt
lots
of
...
lines

我通过执行“wc -l”并将第二个数字除以第一个数字来计算每个节点的行数。因此,基本上,下一步将是这样的:

~$ cat data.txt | parallel -S `cat hosts.txt | tr "\n" ","` -N $LINES_PER_HOST --pipe "ssh $HOST 'cat > /data/piece.txt'"

但是我如何才能为每个主机启动一个命令,我应该用什么来替换 $HOST?我考虑过结合两个输入(一个是主机),但仍然不知道该怎么做。

非常感激任何想法。

答案1

从 20150922 版本开始有效:

parallel-20150922 -a bigfile --roundrobin  --pipepart --slf hosts.txt -j1 'cat > giraf'

相关内容