我有两台机器,我想使用GNU Parallel让多个进程"cat"来自这两台机器的一些文本文件的内容。
我有以下设置。
在本地机器上,在同一目录中,我有以下文件:
- cmd.sh-一个包含以下内容的bash文件:"cat"$@">
- test1.txt-包含以下内容的文本文件:"Test 1">
- test2.txt-包含以下内容的文本文件:"测试2">
- test3.txt-包含以下内容的文本文件:"测试3">
-
nodefile-一个包含以下内容的文本文件:
2/:
4/dan@192.168.0.3
如果我使用wordpress链接中的节点文件示例(如下(,并且我的IP是192.168.0.2。
这些文件都没有在远程计算机上复制。我想让多个进程"cat"每个测试的内容?。txt文件。
最好是:
- 不会在远程机器上留下任何工件
- 将保持本地目录的内容不变
根据这个wordpress示例,我已经能够使用nodefile远程执行多处理命令,但没有涉及远程文件回显的命令。
到目前为止,我有以下内容:
parallel --sshloginfile nodefile --workdir . --basefile cmd.sh -a cmd.sh --trc ::: test1.txt test2.txt test3.txt
但这不起作用,从我的目录中删除文件而不替换它们,还会出现rsync错误。不幸的是,我目前无法提供错误,也无法复制设置。
我对并行非常缺乏经验,有人能指导我完成这项任务的语法吗?到目前为止,我还没能在手册页或网络上找到答案。
运行Ubuntu 16.04 LTS并使用最新版本的GNU并行。
您犯了几个错误:
- -a用于提供输入源。它基本上是:::的别名
- 在GNU Parallel的选项之后和::
- --trc接受一个参数(即要传输回的文件(。您没有要传输回的文件,请改用
--transfer --cleanup
所以:
chmod +x cmd.sh
parallel --sshloginfile nodefile --workdir . --basefile cmd.sh --transfer --cleanup ./cmd.sh ::: test1.txt test2.txt test3.txt
目前还不清楚你是否想将任何东西传输到远程机器,所以也许这真的是正确的答案:
parallel --sshloginfile nodefile --nonall --workdir . ./cmd.sh test1.txt test2.txt test3.txt