替换字符串在GNU并行中不起作用

时间:2016-06-27 12:03:39

标签: gnu-parallel

我有脚本run_md.py,它从名为test.dcd的输入文件生成文件test.pdb。 我想使用GNU parallel在远程服务器上的多个输入文件(test*.pdb)上执行相同的命令,并将结果传回本地计算机。因此,我使用以下命令:

parallel --trc {.}.dcd -j 2 -S $SERVER1 './run_md.py {} 1000' ::: test*.pdb

该命令在服务器上使用2个插槽正常运行。但是,文件不会被传回,我收到以下错误:

rsync: link_stat "/home/bougui/{.}.dcd" failed: No such file or directory (2)
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1655) [Receiver=3.1.1]

看起来替换字符串不起作用。我怎样才能使它有效?

以下是parallel --version的输出:

GNU parallel 20130922
Copyright (C) 2007,2008,2009,2010,2011,2012,2013 Ole Tange and Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
GNU parallel comes with no warranty.

Web site: http://www.gnu.org/software/parallel

When using GNU Parallel for a publication please cite:

O. Tange (2011): GNU Parallel - The Command-Line Power Tool, 
;login: The USENIX Magazine, February 2011:42-47.

2 个答案:

答案 0 :(得分:0)

您正在做的是100%正确。所以你的系统上的东西正在打破这个。请在另一个系统上尝试此操作,如果可能,请按照man parallel报告BUGS。

答案 1 :(得分:0)

该线程中报告的错误已得到修复,此功能适用于最新版本的GNU parallel(20160622)。与Debian 8.5打包在一起的GNU并行版本20130922对于{.}字符串替换的使用存在错误,如下所述:

通过更多测试,我发现必须在并行运行的命令中使用替换字符串指定输出文件。

出于测试目的,您可以在下面找到其他人可以运行的完整示例:

echo This is input_file > input_file && parallel --trc {}.out -S $SERVER1 cat {} ">"{}.out ::: input_file

上面的例子效果很好。当我使用替换字符串{.}时,如下所示:

echo This is input_file > input_file.in && parallel --trc {.}.out -S $SERVER1 cat {} ">"{.}.out ::: input_file

它也有效。但是,如果我没有在命令中并行指定{.}.out,则如下所示:

echo This is input_file > input_file.in && parallel --trc {.}.out -S $SERVER1 cat {} ">"input_file.out ::: input_file

...我重现错误:

rsync: link_stat "/home/bouvier/{.}.out" failed: No such file or   directory (2)
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1655) [Receiver=3.1.1]
rsync: [Receiver] write error: Broken pipe (32)

因此必须在并行运行的命令中指定输出文件。