首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么“查找. -print0 \ xargs -r0 du -chx”和"du -chx“的结果不同?

为什么“查找. -print0 \ xargs -r0 du -chx”和"du -chx“的结果不同?
EN

Stack Overflow用户
提问于 2014-02-04 07:21:00
回答 3查看 286关注 0票数 0

当我尝试使用find获取放置文件的总大小时。-print0,xargs,-r0 du -chx,它的回报:总计61克。当我使用独立的du -chx时,它给我的是: 2.8T总计

% df -h给出了相同的结果:文件系统使用的大小有效使用%安装在/dev/md7上3.6T2.8T599G 83% /opt

错误在哪里?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-02-04 07:29:21

61G是最后一项的总数。

如果您回滚或使用grep,您将看到更多的总计。

代码语言:javascript
复制
find . -print0 | xargs -r0 du -chx|grep total

您请求的是每一个后续的dir和subdir,而不是所有在一起的'du -chx‘。

票数 1
EN

Stack Overflow用户

发布于 2014-02-04 07:35:01

您从'find‘命令中看到的61G总数只是xargs看到的最后一批参数的总数。(xargs只能接受有限数量的参数,所以您看到的“总计”不是“总计”。)

试试这个:

代码语言:javascript
复制
find pjproject-2.1.0/  -print0 | xargs -r0 du -chx | grep "total"

假设没有名为"total“的文件,您将看到一个总计列表,它将或多或少地与du命令的输出相加。

票数 0
EN

Stack Overflow用户

发布于 2014-02-04 07:39:04

一个错误是,find\du将产生重复的结果,例如使用目录结构foo/bar/baz,它将有效地执行'du -chx foo foo/bar foo/bar/baz‘。这是3次计算foo/bar/baz dir。然而,这将错误地计算在高方面,所以不能解释你看到了什么。

第二个问题是您要传递给du的参数的数量。在find中,您将有数千个参数,xargs将以块的形式处理它们。实际上,您并没有看到所有文件的总数,而是其中一小块文件的小计。沿途还会印出其他几个小计。阅读xargs的手册页,特别是-n (max args)和-s (命令行的最大长度)。

这里通常要做的事情不是依赖和进行一次“du”调用,而是在管道中的另一个命令中执行和。但是,一旦您尝试了这一点,您就会遇到我提到的第一个问题--您正在多次计数目录。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21546304

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档