xargs无法在Linux上运行

时间:2018-01-05 15:02:15

标签: linux xargs

我想一次运行多个带有不同参数的python脚本

在尝试这样做时,我遇到了这个xargs命令;我想了解它。

尝试此示例命令echo {a..d} | xargs -n 1 -I % mv % %-01时,它可以在我的MacBook上运行并提供所需的输出。

但是在我登录运行Ubuntu 16.04的VPS并发出相同的命令后,我得到了这个mv: cannot stat 'a b c d': No such file or directory我查看了手册页并搜索了但找不到任何理由。

ps:我猜xargs是默认Ubuntu repo的最新版本。

(这是我关于SO的第一个问题)。

1 个答案:

答案 0 :(得分:2)

您的echo命令会生成一行以空格分隔的输出:

$ echo {a..d}
a b c d

虽然通常xargs需要以空格分隔的输入,但使用-I 时,它需要换行符分隔的输入。从手册页:

-I replace-str
      Replace occurrences of replace-str in the initial-arguments with names
      read  from standard input.  Also, unquoted blanks do not terminate in‐
      put items; instead the separator is the newline character.  Implies -x
      and -L 1.

您现有的命令行会生成以下命令:

mv a b c d a b c d-01

您需要将echo命令的输出分成多行:

$ echo {a..d} | tr ' ' '\n' | xargs -n 1 -I % echo mv % %-01
mv a a-01
mv b b-01
mv c c-01
mv d d-01

正如您所指出的,您可以将上面的tr ...替换为xargs -n1,这会给您相同的结果:因为没有-I xargs会读取以空格分隔的参数,导致在一个单独的行上回显每个参数。

相关问题