为什么管道不能与 'find' 和 'ls' 一起使用

sad*_*v30 0 bash ls pipe xargs

为什么管道不能与 'find' 和 'ls' 一起使用如果我这样做了find . -name *foo* | ls -lah,它会执行 ls$PWD而不是 find 的输出。

然而,解决方案是find . -name *foo* | xargs -r ls -alh或可以使用 exec。

Dav*_*ter 8

请查阅手册页ls(1)!该ls命令在命令行而不是标准输入(即文件描述符 0)上接受它的参数。

当你跑

<SOME_COMMAND> | ls [OPTIONS...]
Run Code Online (Sandbox Code Playgroud)

您指示命令解释器创建一个从左侧命令的标准输出到右侧命令的标准输入(此处为:)的管道( )。但是忽略其标准输入并检查其命令行参数,没有找到位置参数并列出当前工作目录(由 Bash 等 shell 解释器存储在环境变量中)。|lslsPWD

xargs(1)需要令牌从它的标准的输入流(如果没有另外指明由空格字符分隔),并增加了它们作为参数到另一个命令来运行的命令行。在您的情况下,ls给出的命令xargs在其命令行上接收一组路径名,并按照手册中的说明对它们执行其任务。

奖励:-lsGNU的“命令”选项find将以与ls -dils(参见 参考资料find(1))类似的方式打印匹配的路径。