我想针对当前目录中的每个目录使用du命令。因此,我尝试使用以下代码:
ls | du -sb
但它并没有按预期工作。它只输出当前“.”目录的大小,仅此而已。echo也是如此。
ls | echo
输出空行。为什么会这样?
使用管道将第一个命令的输出(stdout)发送到子进程(第二个命令)的stdin(输入)。你提到的命令不会在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