为什么du或echo pipelining不起作用?

Rom*_*eno 6 linux pipeline echo du

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

ls | du -sb
Run Code Online (Sandbox Code Playgroud)

但它没有按预期工作.它仅输出当前'.'的大小.目录,那就是全部.回声同样如此

ls | echo
Run Code Online (Sandbox Code Playgroud)

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

Fat*_*ror 14

使用管道将第一个命令的输出(stdout)发送到子进程的stdin(输入)(第二个命令).您提到的命令不接受任何输入stdin.例如,这可以用于cat(和工作,我的意思是像cat没有参数的运行一样工作,只是传递给你的输入):

ls | cat
Run Code Online (Sandbox Code Playgroud)

对于您的应用程序,这就是它的xargs用武之地.它接受管道输入并将其作为指定命令的参数.所以,你可以让它像:

ls | xargs du -sb
Run Code Online (Sandbox Code Playgroud)

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

du -sb *
Run Code Online (Sandbox Code Playgroud)


ram*_*ski 5

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

du -sb $(ls -d */)
Run Code Online (Sandbox Code Playgroud)