为什么du或echostream水线不工作?

我试图使用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