xargs 到底起什么作用?

xargs 到底起什么作用?

我不明白这到底xargs是什么意思,这就是为什么我很惊讶为什么这两个返回不同的结果:

find ~/Downloads -iname *btsync* | ls -al
find ~/Downloads -iname *btsync* | xargs ls -al

为什么第一个没有返回我想要的内容?相反,它打印显示当前目录中的所有文件。

答案1

并非所有程序都接受输入。该ls命令可以将目录或文件作为争论(例如ls /etc),但您不能通过管道(|)将其传递给它。因此,第一个命令与执行以下命令相同:

$ find ~/Downloads -iname *btsync*
$ ls -al

管道被忽略,因为ls无法从标准输入读取。xargs另一方面,它做了一些完全不同的事情。它读取标准输入,然后在输入的每一行上运行您给它的命令。来自man xargs

  This manual page documents the GNU version of xargs.  xargs reads items
   from  the  standard  input, delimited by blanks (which can be protected
   with double or single quotes or a backslash) or newlines, and  executes
   the  command (default is /bin/echo) one or more times with any initial-
   arguments followed by items read from standard input.  Blank  lines  on
   the standard input are ignored.

因此,xargs将获取命令的每个结果find并运行ls它,这正是您想要的。

相关内容