如何将带参数的命令传递给xargs

时间:2016-01-08 03:56:08

标签: linux bash xargs

echo ls -l -a / | xargs sh -c

如何使上述命令工作?

它只列出当前目录

似乎只将ls传递给xargs

echo '"ls -l -a /"' | xargs sh -c会起作用,但我得到的输入没有“”

2 个答案:

答案 0 :(得分:7)

来源:http://www.unixmantra.com/2013/12/xargs-all-in-one-tutorial-guide.html

如@darklion所述, -I 表示参数列表标记, -c 表示在每个xargs输入行上运行的bash命令。

只需将输入打印到xargs:

ls -d */ | xargs echo
#One at a time
ls -d */ | xargs -n1 echo

每次输入都有更多操作:

ls -d */  | xargs -n1 -I {} /bin/bash -c ' echo {}; ls -l {}; '

您可以将 {} 替换为自定义字符串:

ls -d */  | xargs -n1 -I file /bin/bash -c ' echo file; ls -l file; '

答案 1 :(得分:2)

-c的{​​{1}}标志只接受一个参数而xargs在空格上拆分参数 - 这就是双引号工作的原因(一个级别使它成为一个单词用于shell,一个用于xargs)。

如果您使用sh-0参数null,您的具体案例将有效:

echo ls -l -a / | xargs -0 sh -c