为什么 du 或 echo 流水线不起作用?

发布于 2025-01-05 17:26:11 字数 192 浏览 0 评论 0原文

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

ls | du -sb

但它没有按预期工作。它仅输出当前“.”的大小目录仅此而已。 echo 输出空行也是如此

ls | echo

。为什么会发生这种情况?

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?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

青芜 2025-01-12 17:26:11

使用管道将第一个命令的输出 (stdout) 发送到子进程(第二个命令)的 stdin(输入)。您提到的命令不会在 stdin 上接受任何输入。 ,这可以与 cat 一起使用(通过工作,我的意思是像 cat 一样不带参数运行,只需传递您提供的输入):

ls | cat

例如 您的应用程序,这就是 xargs 的用武之地。它接受管道输入并将其作为指定命令的参数。因此,您可以使其工作方式如下:

ls | xargs du -sb

请注意,默认情况下 xargs 将中断其在空格上的输入,因此,如果您的文件名包含空格,则这将无法按您想要的方式工作。因此,在这种特殊情况下,这样会更好:

du -sb *

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 *
软的没边 2025-01-12 17:26:11

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

du -sb $(ls -d */)

Use command substitution, like this:

du -sb $(ls -d */)
冰雪梦之恋 2025-01-12 17:26:11
$ find . -type d -maxdepth 1 -exec du -sb {} \;

或者

$ ls -d */ | xargs du -sb
$ find . -type d -maxdepth 1 -exec du -sb {} \;

or

$ ls -d */ | xargs du -sb
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文