PERL: БИБЛИОТЕКА ПРОГРАММИСТА - стр. 167
> Смотри также---------------------------------------------------------------------------------------------
Рецепт 4.6; описание более сложных структур данных в рецептах 11.9—11.14.
5.16. Программа: dutree
Программа dutree (см. пример 5.3) преобразует выходные данные du:
% di |
cookbook |
||
19 |
pcb/fix |
||
20 |
pcb/rev/maybe/yes |
||
10 |
pcb/rev/maybe/not |
||
705 |
pcb/rev/maybe |
||
54 |
pob/rev/web |
||
1371 |
pcb/rev |
||
3 |
pcb/pending/mine |
||
1016 |
pcb/pending |
||
2412 |
pcb |
||
в отсортированную иера] |
эхичеа |
||
2412 |
pcb |
||
1371 rev |
|||
| 705 maybe |
|||
I |
675 . |
||
I |
20 yes |
||
I |
10 not |
||
612 . |
|||
54 web |
|||
101 |
6 pending |
||
1013 |
|||
3 |
mine |
||
19 fix |
|||
e |
Аргументы передаются программе dutree через du. Это позволяет вызвать dutree любым из приведенных ниже способов, а может быть, и иначе — если ваша версия du поддерживает другие параметры.
% dutree
% dutree /usr
% dutree -a
% dutree -a /bin
Хэш %Dirsize сопоставляет имена с размерами файлов. Например, значение $Dirsize{"pcb"} в нашем примере равно 2412. Этот хэш используется как для вывода, так и для сортировки подкаталогов каждого каталога по размерам.
5.16. Программа: dutree 175
Хэш %Kids представляет больший интерес. Для любого пути $path значение $Kids{path} содержит (ссылку на) массив с именами подкаталогов данного каталога. Так, элемент с ключом "pcb" содержит ссылку на анонимный массив со строками "fix", "rev" и "pending". Элемент "rev" содержит "maybe" и "web". В свою очередь, элемент "maybe" содержит "yes" и "по", которые не имеют собственных элементов, поскольку являются «листами» (конечными узлами) дерева.
Функции output передается начало дерева — последняя строка, прочитанная из выходных данных du. Сначала функция выводит этот каталог и его размер, затем сортирует его подкаталоги (если они имеются) так, чтобы подкаталоги наибольшего размера оказались наверху. Наконец, output вызывает саму себя, рекурсивно перебирая все подкаталоги. Дополнительные аргументы используются при форматировании.