将文件和目录的管道列表显示为du仅显示目录的大小?

菲拉吉

假设我有一个包含多个子目录的目录,每个子目录都包含一些文件:

1/a.txt
1/b.txt
2/c.txt
2/d.txt
3/e.txt
3/f.txt

我想查看每个文件的大小。请记住,我知道有更简单,更直接的方法来执行此操作,例如du -a我只是想知道为什么以下内容出于教育目的不起作用。


我没有意义的运动

运行find .返回所有文件和目录的列表,所以我尝试用管道将其像这样:

find . | xargs du

但这只是返回目录1、2和3的大小。我缺少一些了解,因为在我看来xargs应该将输出的每一行都映射find到到的调用du


如果相反,我使用:

find . | xargs du -a

然后它会按预期工作,列出所有文件和目录的大小。如果我仅通过使用该-type f选项将文件列表传递给它,它也可以正常工作,因此这与接收混合了文件的目录列表有关。

这里发生了什么?

托马斯·迪基

发生的事情是xargs(如果可以的话)将所有名称放在一个命令行中,以便您仅看到一个传递给的命令du然后du忽略文件名(如您所料:文件是目录的一部分,并且不会重复计算两次)。

如果在中使用-n 1参数xargs,它将拆分命令,您将看到更多预期的内容。

find . | xargs -n 1 du -a

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章