7

我正在尝试对当前目录中的每个目录使用 du 命令。所以我试图使用这样的代码:

ls | du -sb

但它没有按预期工作。它仅输出当前“。”的大小。目录,仅此而已。回声也是一样

ls | echo

输出空行。为什么会这样?

4

3 回答 3

16

使用管道将第一个命令的输出(stdout)发送到子进程(第二个命令)的标准输入(输入)。您提到的命令不会在stdin. 例如,这将起作用cat(并且通过工作,我的意思是像cat没有参数的运行一样工作,只需传递你给它的输入):

ls | cat

对于您的应用程序,这就是发挥作用的地方xargs。它接受管道输入并将其作为参数提供给指定的命令。所以,你可以让它像这样工作:

ls | xargs du -sb

请注意,默认情况下xargs会破坏其对空格的输入,因此如果您的文件名包含空格,这将无法按您的意愿工作。因此,在这种特殊情况下,这会更好:

du -sb *
于 2012-02-15T17:04:13.257 回答
5

使用命令替换,如下所示:

du -sb $(ls -d */)
于 2012-02-15T17:09:09.427 回答
2
$ find . -type d -maxdepth 1 -exec du -sb {} \;

或者

$ ls -d */ | xargs du -sb
于 2012-02-15T17:08:51.920 回答