Получить размер и другую информацию с помощью команды "du"

Я делаю небольшой скрипт на bash, который показывает общий размер в мегабайтах, количество файлов, номер папки и имя папки. У меня есть почти все, кроме размера в мб

du -a -h | cut -d/ -f2 | sort | uniq -c

Это показывает что-то вроде этого:

  4 01 folder 01
  6 02 folder 02
 11 03 folder 03
 13 04 folder 04
 16 05 folder 05
 .....
 15 13 folder 13
  1 5.7G    .

Как видите, сортировка: количество файлов, номер папки и имя.

Я хочу этот:

  300M 4 01 folder 01
  435M 6 02 folder 02
  690M 11 03 folder 03
  780M 13 04 folder 04
  1.6G 16 05 folder 05
 .....
 15 13 folder 13
  1 5.7G    .

заранее спасибо.

PD есть какой-нибудь способ показать имя над каждым столбцом, как это?

  M    F  # name
  300M 4 01 folder 01
  435M 6 02 folder 02
  690M 11 03 folder 03
  780M 13 04 folder 04
  1.6G 16 05 folder 05
 .....
 15 13 folder 13
  1 5.7G    .

1 ответ

Решение

Как насчет этого?

echo -e "Size\tFiles\tDirectory"; paste <(du -sh ./*/ | sort -k2 | cut -f1) <(find ./*/ | cut -d/ -f2 | uniq -c | sort -k2 | awk '{print ($1-1)"\t"$2}') | sort -nk2

Образец вывода:

Size    Files   Directory
172M    36      callrecords
17M     747     manual
83M     2251    input
7.5G    16867   output

Объяснение:

Добавьте заголовок:

echo -e "Size\tFiles\tDirectory";

<(COMMAND) - это структура, которая позволяет использовать вывод команды, как если бы это был файл. Вставить берет 2 файла и выводит их рядом. Итак, мы соединяем вместе результаты двух команд. Во-первых, это:

<(du -sh ./*/ | sort -k2 | cut -f1)

Который просто находит размер подпапок текущей папки, суммируя что-либо внутри. Затем он сортируется по именам файлов / папок, а затем берется первый столбец. Это дает нам список размеров подпапок текущей папки, отсортированный по их названию.

Вторая команда это:

<(find ./*/ | cut -d/ -f2 | uniq -c | sort -k2 | awk '{print ($1-1)"\t"$2}')

Это похоже на исходную команду - она ​​находит папки под текущим каталогом, усекает имена, чтобы включить только первый подуровень, а затем подсчитывает их, чтобы получить список подпапок текущей папки и количество файлов в каждой. Затем они сортируются по именам папок, и команда awk форматирует результаты, а также вычитает 1 из числа файлов для каждой папки (так как сама папка включена). Затем мы можем вставить результаты вместе, чтобы получить (почти) окончательный результат.

Наконец, мы используем sort -nk2 в выводе команды вставки для сортировки по номеру во 2-м поле - то есть по количеству файлов.

Другие вопросы по тегам