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?
Use command substitution, like this:
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, withcat
(and by work, I mean work likecat
run with no arguments, and just pass along the input you give it):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: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:or