我试图使用du命令为当前的每个目录。 所以我试图使用这样的代码:
ls | du -sb
但它没有按预期工作。 它只输出当前的大小。 目录,这就是所有。 回声也是一样的
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