【发布时间】:2020-02-02 01:03:06
【问题描述】:
我正在尝试在 shell 脚本的某些文件夹中生成用户使用情况,但我发现我的 find 和 du 组合出现了一些奇怪的行为。
我有一个包含约 9500 个文件的文件夹,总共 5GB。此文件夹的 4GB 由 7 个大文件组成,其余 1GB 由小文件组成(其中近 9000 个)。我遇到的问题是我的脚本似乎忽略了大部分文件,因此 du 报告的总使用量不正确。
下面的行给出了文件总数的正确数字(总数+1):
$ find . -type -f -exec du -ch {} + | wc -l
9596
但是,如果我只是尝试获取它返回的所有文件的总数和不正确的值。
$ find . -type -f -exec du -ch {} +
...lines of files
139M total < this value is incorrect, should be ~5GB
如果我将大小限制为大文件(超过 25MB),它确实会拾取大文件并靠近,但显然缺少构成剩余 1GB 的许多小文件。
$ find . -type -f -size +25M -exec du -ch {} +
561M ./largefile0
483M ./largefile1
514M ./largefile2
948M ./largefile3
360M ./largefile4
768M ./largefile5
764M ./largefile6
4.3G total < this is the correct total for these files
最后,更奇怪的是,如果我在没有 size 参数的情况下再次运行该命令,然后 grep for large 它会选择 largefile[0-6] 文件。
$ find . -type -f -size +25M -exec du -ch {} + | grep large
561M ./largefile0
483M ./largefile1
514M ./largefile2
948M ./largefile3
360M ./largefile4
768M ./largefile5
764M ./largefile6
所以我不太确定这里发生了什么,好像 du 可以报告的文件数量是其总数的限制,但对于这个数据集来说,它似乎总是等于 139M。
【问题讨论】: