Я использую эту команду, чтобы найти нужные мне папки и подсчитать их размер.
find . -type d -name 'tmp_c*' | xargs du -hcs {} \; +
Моя версия find не поддерживает -exec. Но это работает. Однако я не уверен, что она выдает мне правильные итоги по каталогам, содержащим мою строку поиска. Когда я запускаю команду и передаю ее в less, я вижу, что она подсчитывает размер каждой папки, а затем время от времени выводит итог. Вот так:
140K ./r/g/userid/attach/tmp_c_241091464_2
68K ./r/g/userid/attach/tmp_c_58367014_undefined
2.3G total
Если я перенаправлю вывод в файл, а затем выполню grep по total, то получу следующее:
2.3G total
978M total
1.1G total
2.0G total
1.1G total
ядуматьэто дает мне правильные числа. Но как мне сделать эту команду еще на шаг дальше и заставить ее суммировать итоги для общего итога в одной строке?
решение1
find . -type d -name 'tmp_c*' -print0 | du -hcs --files0-from -
Это предполагает (достаточно свежие?) версии GNU find
и du
.
решение2
Это должно работать, проверено на моем EL4-боксе... это самый старый из тех, что у меня есть, и он заставляет меня вздрагивать. Я не знаю, как вы используете EL3.
find . -type d -name 'tmp_c*' -print0|xargs -0 du -c|tail -1
Сделано сcoreutils-4.5.3-26
решение3
https://stackoverflow.com/a/1323769/799204
Альтернативным решением является использование awk:
но сценарий должен быть адаптирован для этого случая, попробуйте
find . -type d -name 'tmp_c*' -print0 | xargs -0 du -s | awk 'BEGIN { sum=0 } { sum+=$1 } END { print sum }'
Вывод будет в десятичном формате
решение4
Я проверил, epel начинается с 5, а не с 3, так что единственный вариант — пользовательский скрипт.
Можно также установить ncdu;
Я использую его постоянно, гораздо проще и быстрее, чем любой кастомный bash. (Можно перемещаться по каталогам, экономит кучу времени).