Как использовать команды exec и du для определения размера файлов

#linux #bash #shell

#linux #bash #оболочка

Вопрос:

Я пытаюсь создать скрипт с помощью команды find, чтобы найти все каталоги с именем «bin» в каталоге «/ usr /«. Я также хочу знать размер каждого из этих каталогов. Как бы я это сделал, используя флаг -exec и команду du?

Это то, что мне удалось собрать до сих пор:

 find /usr/ -name "bin" -exec 

du bin
  

Комментарии:

1. @WilliamPursell Нет ли способа использовать оба?

2. Мне не ясно, чего вы хотите. Вам нужно количество файлов в каталоге, или сумма размеров файлов в каталоге, или диск, используемый всеми файлами в (и ниже?) каталог.

3. Но, вероятно, вы просто ищете find /usr -name bin -exec du {} ;

Ответ №1:

Следующий oneliner выводит каталоги и их общий размер файлов. -c Аргумент выдает общее количество файлов внутри.

 $ find /usr -type d -name bin -exec du -shc {}  ;

104K    /usr/src/gcc/contrib/reghunt/bin
67M /usr/bin
8.4M    /usr/local/bin
75M total
  

Комментарии:

1. Это именно то, что я искал, огромное вам спасибо! Однако, что делает часть -type d?

2. @hackerNuB ограничивает выбор каталогами, гарантирует, что вы учитываете не файл bin, а только содержимое каталогов bin

3. @neau Я думаю, вам следует завершить команду вместо ; , чтобы find вызывать du один раз, а не один раз для каждого найденного каталога. Это сделало бы вычисленную сумму, по крайней мере, намного более полезной.

4. @Aaron, вы правы, спасибо за информацию! Я отредактировал свой первоначальный комментарий.

5. @Aaron Да, это сработало как шарм! Я также попытался удалить аргумент -s, но я не мог понять, что он сделал?

Ответ №2:

 find /usr -type d -name "bin" -exec du {} ;
  

Комментарии:

1. в этом случае ; может быть изменено на , чтобы ограничить количество порожденных процессов