Program: dutree
The dutree program, shown in Example 5.3, turns the output of du.
% du pcb
19 pcb/fix
20 pcb/rev/maybe/yes
10 pcb/rev/maybe/not
705 pcb/rev/maybe
54 pcb/rev/web
1371 pcb/rev
3 pcb/pending/mine
1016 pcb/pending
2412 pcbinto sorted, indented output:
2412 pcb
| 1371 rev
| | 705 maybe
| | | 675 .
| | | 20 yes
| | | 10 not
| | 612 .
| | 54 web
| 1016 pending
| | 1013 .
| | 3 mine
| 19 fix
| 6 .The arguments you give dutree are passed through to du. That way you could call dutree in any of these ways, or maybe more if your du supports other options.
% dutree % dutree /usr % dutree -a % dutree -a /bin
The %Dirsize hash maintains the mapping of names
to sizes. For example, $Dirsize{"pcb"} contains
2412 in this sample run. We’ll use that hash both for output
and for sorting each directory’s subdirectories by size.
%Kids is more interesting. For any given path
$path, $Kids{$path} contains a
(reference to an) array of names of subdirectories of this one. The
"pcb" entry contains a reference to an anonymous
array containing "fix", "rev",
and "pending". The "rev" entry
contains "maybe" and "web". The
"maybe" entry contains "yes"
and "not", which do not have their own entries
because they are end nodes in the tree.
The
output
function is passed the start of the tree—the last line read
in from the output of du. First it prints that directory and its size. Then the function sorts the directory’s children (if any) so that those with the most disk usage float to the ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access