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

Sat*_*ato 2 linux bash xargs

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

如何使上述命令工作?

它只列出当前目录

似乎只有ls被传递给xargs

echo '"ls -l -a /"' | xargs sh -c 虽然会工作,但我得到的输入没有""

dhi*_*you 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
Run Code Online (Sandbox Code Playgroud)

对每个输入的更多操作:

ls -d */  | xargs -n1 -I {} /bin/bash -c ' echo {}; ls -l {}; '
Run Code Online (Sandbox Code Playgroud)

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

ls -d */  | xargs -n1 -I file /bin/bash -c ' echo file; ls -l file; '
Run Code Online (Sandbox Code Playgroud)


dar*_*ion 5

当 xargs 在空格上分割参数时,标志 to 只接受一个参数 - 这就是双引号起作用的原因(一层使其成为 shell 的单个单词,一层用于 xargs )-csh

如果您对特定情况使用-0or参数将起作用:nullxargs

回声 ls -l -a / | xargs -0 sh -c

  • 其他选项:`echo ls -l -a / | xargs -I '{}' sh -c "{}"` (7认同)