Получить размер и другую информацию с помощью команды "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-м поле - то есть по количеству файлов.