Я пытаюсь сгенерировать пользовательское использование в определенных папках в сценарии оболочки и обнаружил странное поведение с моей комбинацией find и du.
У меня есть папка с ~ 9500 файлами в общей сложности 5 ГБ. 4 ГБ этой папки состоит из 7 больших файлов, а оставшийся 1 ГБ состоит из небольших файлов (около 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
Если я ограничу размер до большие файлы (более 25 МБ), он действительно берет большие файлы и приближается, но, очевидно, отсутствует то много маленьких файлов, которые составляют оставшийся 1 ГБ.
$ 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
Наконец, даже более странно, если я запускаю снова введите команду без параметра размера и затем grep для 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 для этого набора данных.