Linux xargs 命令

标签 linux xargs

一个简短的问题。 一个命令

cat * | wc -c

不需要xargs,但是命令

ls | xargs echo

需要 xargs 命令。 可以请有人更清楚地向我解释 xargs 的概念。 谢谢。

最佳答案

简而言之,xargsstdin(标准输入)转换为您指定命令的参数。例如

$ seq 1 3
1
2
3
$ seq 1 3 | xargs echo
1 2 3

seq,如您所见,将序列打印到 stdout。我们将 (|) 输出到 stdin 上的 xargsxargsstdin 作为参数调用 echo,因此我们得到 echo 1 2 3

作为el.pescado said , wc 接受 stdin 上的输入(您也可以给它一个文件参数)。因为 cat 将文件打印到 stdout,您可以将其直接通过管道传输到 wc

$ cat text
This is only
a test
$ cat text | wc
      2       5      20
$ wc text
 2  5 20 text

echo 不接受来自 stdin 的任何内容。那会很奇怪,因为 echo 的工作是打印到 stdout - 您已经可以打印任何您要通过管道传输的内容。因此,您使用 xargs 将流转换为参数。

echo 可能是一个太琐碎的命令,无法查看正在发生的事情,所以这里有一个更真实的示例。假设我们有一个包含一些文件的目录:

$ ls
bar1 foo1 foo2 foo3 foo4 foo5 foo6

foo 到这里为止,我们想删除所有这些,但我们懒得输入 rm foo1 foo2 ...。毕竟,我们是程序员,而且我们很懒惰。我们能做的是……

$ ls foo* | xargs rm
$ ls
bar1

rm 需要参数,ls foo* 打印我们要删除的每个文件,xargs 进行翻译。


作为旁注,有时您希望将 stdin 分成更小的部分。 xargs -n 对此非常有用,它一次将 N 个参数传递给您的最终命令。

$ ls foo* | xargs -n2 echo
foo1 foo2
foo3 foo4
foo5 foo6

关于Linux xargs 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32972377/

相关文章:

aws-cli - 将值传递给 xargs 中的多个命令

linux - 在 shell 脚本中列出文件

linux - 当有两个 gpu 时,如何设置 Torch 只使用一个 gpu?

regex - 使用 sed 和正则表达式来替换字符串

python - 终止另一个用户的脚本

awk - 多线程 Grep

java - 如何使用 java 32 位与 64 位

regex - 文件名匹配和导出

python - 在 python 中使用具有多个值和相同参数的子进程

linux - 在 Ubuntu 上并行化进程