【发布时间】:2011-07-07 04:41:25
【问题描述】:
有人可以解释为什么在尝试对多个文件运行 ex 命令脚本时,这是可行的:
for x in `ls *`;do ex $x <excmds;done;
但这不是:
ls *|xargs -i ex {} <excmds
第一个将为每个文件执行ex并在“excmds”中运行命令 第二,我不确定它做了什么,但它不会更改任何文件。 我猜重定向是一个问题,并且不会对 xargs 的每次执行起作用? 有没有办法用 xargs 做到这一点? (我在 xargs 上提出的另一个问题 - 也许我应该停止使用它:()
【问题讨论】:
-
在这种情况下,
xargs将从excmds读取其输入而不是ls的输出。 -
嗯,好吧,这有点明显,现在我看看它。看起来这应该是答案,而不是评论,但我仍然想知道如何使用 xargs 来做到这一点
-
乔我没有回答,因为我没有真正的答案(只有这个评论)。似乎
xargs是这个工作的错误工具,因为您想为每个文件执行一些命令恰好一次。xargs对于执行可以同时处理多个输入的命令很有用。 -
要查看
xargs的作用,请使用-t选项运行它。我还怀疑ls *是正确的工具(在带有子文件夹的文件夹中尝试!) -
@Jakob 谢谢,不知道-t,我还重读了关于 GNU Parallel 的答案,注意到 ls y*|xargs -i -t ex {} \<excmds
ex ya <excmds然后它就挂了!假设您的意思是 ls 不是正确的工具