Why du or echo pipelining is not working?

我只是一个虾纸丫 提交于 2019-12-06 02:13:46

问题


I'm trying to use du command for every directory in the current one. So I'm trying to use code like this:

ls | du -sb

But its not working as expected. It outputs only size of current '.' directory and thats all. The same thing is with echo

ls | echo

Outputs empty line. Why is this happening?


回答1:


Using a pipe sends the output (stdout) of the first command, to stdin (input) of the child process (2nd command). The commands you mentioned don't take any input on stdin. This would work, for example, with cat (and by work, I mean work like cat run with no arguments, and just pass along the input you give it):

ls | cat

For your applications, this is where xargs comes in. It takes piped input and gives it as arguments to the command specified. So, you can make it work like:

ls | xargs du -sb

Beware that by default xargs will break its input on spaces, so if your filenames contain spaces this won't work as you want. So, in this particular case, this would be better:

du -sb *



回答2:


Use command substitution, like this:

du -sb $(ls -d */)



回答3:


$ find . -type d -maxdepth 1 -exec du -sb {} \;

or

$ ls -d */ | xargs du -sb


来源:https://stackoverflow.com/questions/9297723/why-du-or-echo-pipelining-is-not-working

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!