Найти размер каталогов рекурсивно и получить общий размер

Найти размер каталогов рекурсивно и получить общий размер

Я использую эту команду, чтобы найти нужные мне папки и подсчитать их размер.

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;

https://dev.yorhel.nl/ncduit

Я использую его постоянно, гораздо проще и быстрее, чем любой кастомный bash. (Можно перемещаться по каталогам, экономит кучу времени).

Связанный контент