当我尝试使用find获取放置文件的总大小时。-print0,xargs,-r0 du -chx,它的回报:总计61克。当我使用独立的du -chx时,它给我的是: 2.8T总计
% df -h给出了相同的结果:文件系统使用的大小有效使用%安装在/dev/md7上3.6T2.8T599G 83% /opt
错误在哪里?
发布于 2014-02-04 07:29:21
61G是最后一项的总数。
如果您回滚或使用grep,您将看到更多的总计。
find . -print0 | xargs -r0 du -chx|grep total您请求的是每一个后续的dir和subdir,而不是所有在一起的'du -chx‘。
发布于 2014-02-04 07:35:01
您从'find‘命令中看到的61G总数只是xargs看到的最后一批参数的总数。(xargs只能接受有限数量的参数,所以您看到的“总计”不是“总计”。)
试试这个:
find pjproject-2.1.0/ -print0 | xargs -r0 du -chx | grep "total"假设没有名为"total“的文件,您将看到一个总计列表,它将或多或少地与du命令的输出相加。
发布于 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”调用,而是在管道中的另一个命令中执行和。但是,一旦您尝试了这一点,您就会遇到我提到的第一个问题--您正在多次计数目录。
https://stackoverflow.com/questions/21546304
复制相似问题