PERL: БИБЛИОТЕКА ПРОГРАММИСТА


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 вызывает саму себя, рекур­сивно перебирая все подкаталоги. Дополнительные аргументы используются при форматировании.




- Начало -  - Назад -  - Вперед -