具有多个参数的 xargs

新手上路,请多包涵

我有一个源输入 input.txt

 a.txt
b.txt
c.txt

我想将这些输入输入到程序中,如下所示:

 my-program --file=a.txt --file=b.txt --file=c.txt

所以我尝试使用 xargs ,但没有运气。

 cat input.txt | xargs -i echo "my-program --file"{}

它给

my-program --file=a.txt
my-program --file=b.txt
my-program --file=c.txt

但我想要

my-program --file=a.txt --file=b.txt --file=c.txt

任何想法?

原文由 Howard 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 746
2 个回答

到目前为止给出的解决方案都没有正确处理包含空格的文件名。如果文件名包含 ‘ 或 “,有些甚至会失败。如果您的输入文件是由用户生成的,您应该为令人惊讶的文件名做好准备。

GNU Parallel 可以很好地处理这些文件名,并为您(至少)提供 3 种不同的解决方案。如果您的程序需要 3 个且仅 3 个参数,那么这将起作用:

 (echo a1.txt; echo b1.txt; echo c1.txt;
 echo a2.txt; echo b2.txt; echo c2.txt;) |
parallel -N 3 my-program --file={1} --file={2} --file={3}

或者:

 (echo a1.txt; echo b1.txt; echo c1.txt;
 echo a2.txt; echo b2.txt; echo c2.txt;) |
parallel -X -N 3 my-program --file={}

但是,如果您的程序采用命令行中可以容纳的参数数量:

 (echo a1.txt; echo b1.txt; echo c1.txt;
 echo d1.txt; echo e1.txt; echo f1.txt;) |
parallel -X my-program --file={}

观看介绍视频以了解更多信息: http ://www.youtube.com/watch?v=OpaiGYxkSuQ

原文由 Ole Tange 发布,翻译遵循 CC BY-SA 2.5 许可协议

不要听他们所有人的。 :) 看看这个例子:

 echo argument1 argument2 argument3 | xargs -l bash -c 'echo this is first:$0 second:$1 third:$2'

输出将是:

 this is first:argument1 second:argument2 third:argument3

原文由 sauliux 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题