当我尝试使用find获取已放置文件的总大小时。 -print0 | xargs -r0 du -chx 回归: 共61G。 当我使用独立的du -chx时它会给我: 总共2.8T
%df -h给出相同的结果: 使用的文件系统大小可用使用%挂载 / dev / md7 3.6T 2.8T 599G 83%/ opt
哪里出错?
答案 0 :(得分:1)
61G是最后一项的总和。
如果你向后滚动或使用grep,你会看到更多的总数。
find . -print0 | xargs -r0 du -chx|grep total
您正在为每个后续目录和子目录请求'du -chx',而不是一起请求。
答案 1 :(得分:0)
你从'find'命令看到的61G总数只是xargs看到的最后一批“参数”的总和。 (xargs只能接受有限数量的参数,因此您看到的“总数”不是“总计”。)
试试这个:
find pjproject-2.1.0/ -print0 | xargs -r0 du -chx | grep "total"
假设没有名为“total”的文件,你会看到一个总数列表,它们或多或少会与du命令的输出相加。
答案 2 :(得分:0)
一个错误是find | du会添加重复的结果,例如使用目录结构foo / bar / baz它会有效地执行'du -chx foo foo / bar foo / bar / baz'。这是foo / bar / baz目录的3倍。然而,这会在高位错误计算,所以不能解释你所看到的。
第二个问题是您传递给du的参数数量。在查找案例中,您将拥有数千个参数,而xargs将以块的形式处理它们。你实际上并没有看到所有文件的总数,而是它们的一大块的小计。沿途还会印出其他几个小计。阅读xargs的手册页,特别是-n(max args)和-s(命令行的最大长度)
这里做的正常事情是不要依赖于单个调用'du'的总和,而是在管道中的另一个命令中执行求和。但是,一旦你尝试这个,你就会遇到我提到的第一个问题 - 你多次计算目录。