假设我有一个包含多个子目录的目录,每个子目录都包含一些文件:
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] 删除。
我来说两句