通过管道传递值

xia*_*012 3 command-line pipe

我不太了解 Linux 命令行中的管道。

我注意到:

ll - R | grep *.pdf
Run Code Online (Sandbox Code Playgroud)

将列出以 .pdf

locate *.pdf | du -h
Run Code Online (Sandbox Code Playgroud)

不会计算以.pdf.结尾的文件的大小。相反,它会列出当前目录中文件的大小。

这里出了什么问题?

我想到的是第一个命令的输出是下一个命令的输入。

n0p*_*0pe 7

管道的工作原理是将一个程序的输出发送到另一个程序的输入。这意味着接收另一个输出的程序必须能够读取STDIN标准流)。

在这种情况下,grep能够读取 的输出,ll因为它是这样设计的。du需要一个命令行参数指向它应该运行的目录(如果没有给出目录,它将默认为当前工作目录./)。

至于查看.pdf文件的大小,如果所有文件都在一个目录中,则可以运行du -h -d1 /path/to/pdf/dirlocate *.pdf | xargs | du -h。如果它们位于不同的目录中,您将想要一起使用-execfind(另一个用户可能会帮您解决这个问题,我不太确定该怎么做)。

  • 除了`du -h -d1 /path/to/pdf/dir`,也可以使用`locate *.pdf | xargs | du -h` (3认同)