Получить общий размер папок с помощью find & du

Я пытаюсь получить размер каталогов с именем "bak" с помощью find и du.

Я делаю это: find -name bak -type d -exec du -ch '{}' \;

Но он возвращает размер для каждой папки с именем "bak", а не итоговой.

В любом случае, чтобы получить их? Спасибо:)

Ответ 1

Используйте xargs(1) вместо -exec:

find . -name bak -type d | xargs du -ch

-exec выполняет команду для каждого найденного файла (проверьте документацию find(1)). Piping to xargs позволяет объединять эти имена файлов и запускать только du один раз. Вы также можете сделать:

find -name bak -type d -exec du -ch '{}' \; +

Если ваша версия find поддерживает его.

Ответ 2

Попробуйте du -hcs. С manpage:

 -s, --summarize
      display only a total for each argument

Ответ 3

Feed du с результатами поиска:

du -shc $(find . -name bak -type d)

Ответ 4

Если файлов много, использование -exec... + может выполняться несколько раз, и вы получите несколько промежуточных итогов.

Альтернатива - передать результат поиска:

find . -name bak -type d -print0 | du -ch --files0-from=-