рекурсивный поиск размера бинарных каталогов в linux - PullRequest
0 голосов
/ 03 мая 2019

Не могли бы вы порекомендовать хорошую утилиту / функцию BASH, которая сканирует каталог и выдает его размер?

Мне нужно найти размер исполняемых файлов в двоичных каталогах: /usr/bin и /bin, чтобы найти их среднее значение и медиану.

Я не уверен, лучше ли использовать команду du или ls?

Какой самый простой и эффективный способ найти среднее и среднее значение каталога в Linux?

PS: он должен быть рекурсивным, так как внутри несколько каталогов.

1 Ответ

1 голос
/ 03 мая 2019

Это двухэтапный процесс. Сначала найдите использование диска каждым файлом, а затем вычислите значения.

Для первого du явно мой любимый.

find /usr/bin -type f -exec du '{}' '+'

Это будет искать в любом файле (-type f) и добавлять ('+') его имя файла ('{}') к вызову (-exec) du.

Результатом будет разделенный табуляцией список использования (в блоках IIRC) и имени файла.

Теперь идет вторая часть (здесь для среднего). Этот список мы собираемся подать в awk и позволить ему суммировать и делить на количество строк

{ sum = $1 } END { print "avg: " sum/NR }

Первый блок будет выполняться каждую строку и добавит значение первого (разделенного табуляцией) столбца к переменной sum. Другой блок имеет префикс END, означающий, что он будет выполнен, когда stdin - EOF. NR - это специальная переменная, обозначающая количество строк.

Итак, готовая команда выглядит так:

find /usr/bin -type f -exec du '{}' '+' | awk '{ sum += $1 } END { print "Avg: " sum/NR }'

Теперь прочитайте о find, awk и конвейерах оболочки. Эти вещи значительно облегчат вашу жизнь, когда вам придется иметь дело с оболочкой Linux. Также полезны базовые знания о линейной буферизации и стандартных потоках ввода-вывода.

...