我正在尝试为当前目录中的每个目录使用du命令。所以我试图使用这样的代码:为什么du或echo流水线不工作?
ls | du -sb
但它没有按预期工作。它仅输出当前的大小'。'。目录和那是所有。 同样的事情与回声
ls | echo
输出空行。这是为什么发生?
我正在尝试为当前目录中的每个目录使用du命令。所以我试图使用这样的代码:为什么du或echo流水线不工作?
ls | du -sb
但它没有按预期工作。它仅输出当前的大小'。'。目录和那是所有。 同样的事情与回声
ls | echo
输出空行。这是为什么发生?
使用管发送第一命令的输出(标准输出),子进程(第二命令)的标准输入(输入)。你提到的命令在stdin
上没有任何输入。这会工作,例如,与cat
(和工作,我的意思是工作就像cat
运行不带任何参数,只是沿着输入你给它传递):
ls | cat
对于您的应用程序,这就是xargs
它采用管道输入并将其作为所指定命令的参数。所以,你可以把它一样工作:
ls | xargs du -sb
要注意的是默认xargs
将打破空间的输入,因此,如果您的文件名包含空格,只要你想这是不行的。因此,在这种特殊情况下,这将是更好的:
du -sb *
$ find . -type d -maxdepth 1 -exec du -sb {} \;
或
$ ls -d */ | xargs du -sb
使用命令替换,就像这样:
du -sb $(ls -d */)
什么都-sb *意思? – Romeno 2012-02-15 17:55:24
'*'是一个glob(或者你可能知道的通配符)。 shell将用当前目录中与其匹配的所有文件(或目录等)名称替换它。例如,Y也可以用'* .jpg'来匹配任何以.jpg结尾的文件 – FatalError 2012-02-15 18:02:19