我正在尝试对当前目录中的每个目录使用 du 命令。所以我试图使用这样的代码:
ls | du -sb
但它没有按预期工作。它仅输出当前“。”的大小。目录,仅此而已。回声也是一样
ls | echo
输出空行。为什么会这样?
使用管道将第一个命令的输出(stdout)发送到子进程(第二个命令)的标准输入(输入)。您提到的命令不会在stdin
. 例如,这将起作用cat
(并且通过工作,我的意思是像cat
没有参数的运行一样工作,只需传递你给它的输入):
ls | cat
对于您的应用程序,这就是发挥作用的地方xargs
。它接受管道输入并将其作为参数提供给指定的命令。所以,你可以让它像这样工作:
ls | xargs du -sb
请注意,默认情况下xargs
会破坏其对空格的输入,因此如果您的文件名包含空格,这将无法按您的意愿工作。因此,在这种特殊情况下,这会更好:
du -sb *
使用命令替换,如下所示:
du -sb $(ls -d */)
$ find . -type d -maxdepth 1 -exec du -sb {} \;
或者
$ ls -d */ | xargs du -sb