我不太了解 Linux 命令行中的管道。
我注意到:
ll - R | grep *.pdf
Run Code Online (Sandbox Code Playgroud)
将列出以 .pdf
但
locate *.pdf | du -h
Run Code Online (Sandbox Code Playgroud)
不会计算以.pdf.结尾的文件的大小。相反,它会列出当前目录中文件的大小。
这里出了什么问题?
我想到的是第一个命令的输出是下一个命令的输入。
管道的工作原理是将一个程序的输出发送到另一个程序的输入。这意味着接收另一个输出的程序必须能够读取STDIN(标准流)。
在这种情况下,grep能够读取 的输出,ll因为它是这样设计的。du需要一个命令行参数指向它应该运行的目录(如果没有给出目录,它将默认为当前工作目录./)。
至于查看.pdf文件的大小,如果所有文件都在一个目录中,则可以运行du -h -d1 /path/to/pdf/dir或locate *.pdf | xargs | du -h。如果它们位于不同的目录中,您将想要一起使用-exec和find(另一个用户可能会帮您解决这个问题,我不太确定该怎么做)。