Blame


1 1ddd2d4e 2023-09-10 jrmu #!/usr/bin/perl
2 1ddd2d4e 2023-09-10 jrmu
3 1ddd2d4e 2023-09-10 jrmu # Modify the recursive directory dumping routine so it shows the nested
4 1ddd2d4e 2023-09-10 jrmu # directories through indentation. An empty directory should show up as:
5 1ddd2d4e 2023-09-10 jrmu #
6 1ddd2d4e 2023-09-10 jrmu # sandbar, an empty directory
7 1ddd2d4e 2023-09-10 jrmu #
8 1ddd2d4e 2023-09-10 jrmu # while a nonempty directory should appear with nested contents, indented two
9 1ddd2d4e 2023-09-10 jrmu # spaces:
10 1ddd2d4e 2023-09-10 jrmu #
11 1ddd2d4e 2023-09-10 jrmu # uss_minnow, with contents:
12 1ddd2d4e 2023-09-10 jrmu # anchor
13 1ddd2d4e 2023-09-10 jrmu # broken_radio
14 1ddd2d4e 2023-09-10 jrmu # galley, with contents:
15 1ddd2d4e 2023-09-10 jrmu # captain_crunch_cereal
16 1ddd2d4e 2023-09-10 jrmu # gallon_of_milk
17 1ddd2d4e 2023-09-10 jrmu # tuna_fish_sandiwch
18 1ddd2d4e 2023-09-10 jrmu # life_preservers
19 1ddd2d4e 2023-09-10 jrmu
20 1ddd2d4e 2023-09-10 jrmu use v5.24;
21 1ddd2d4e 2023-09-10 jrmu use warnings;
22 1ddd2d4e 2023-09-10 jrmu use strict;
23 1ddd2d4e 2023-09-10 jrmu use utf8;
24 1ddd2d4e 2023-09-10 jrmu use File::Basename;
25 1ddd2d4e 2023-09-10 jrmu
26 1ddd2d4e 2023-09-10 jrmu sub data_for_path {
27 1ddd2d4e 2023-09-10 jrmu my $path = shift;
28 1ddd2d4e 2023-09-10 jrmu if (-f $path or -l $path) {
29 1ddd2d4e 2023-09-10 jrmu return undef;
30 1ddd2d4e 2023-09-10 jrmu } elsif (-d $path) {
31 1ddd2d4e 2023-09-10 jrmu my %directory;
32 1ddd2d4e 2023-09-10 jrmu opendir PATH, $path or die "Cannot opendir $path: $!";
33 1ddd2d4e 2023-09-10 jrmu my @names = readdir PATH;
34 1ddd2d4e 2023-09-10 jrmu closedir PATH;
35 1ddd2d4e 2023-09-10 jrmu for my $name (@names) {
36 1ddd2d4e 2023-09-10 jrmu next if $name eq '.' or $name eq '..';
37 1ddd2d4e 2023-09-10 jrmu $directory{$name} = data_for_path("$path/$name");
38 1ddd2d4e 2023-09-10 jrmu }
39 1ddd2d4e 2023-09-10 jrmu return \%directory;
40 1ddd2d4e 2023-09-10 jrmu } else {
41 1ddd2d4e 2023-09-10 jrmu warn "$path is neither a file nor a directory\n";
42 1ddd2d4e 2023-09-10 jrmu return undef;
43 1ddd2d4e 2023-09-10 jrmu }
44 1ddd2d4e 2023-09-10 jrmu }
45 1ddd2d4e 2023-09-10 jrmu
46 1ddd2d4e 2023-09-10 jrmu sub dump_data_for_path {
47 1ddd2d4e 2023-09-10 jrmu my ($path, $data, $level) = @_;
48 1ddd2d4e 2023-09-10 jrmu if (not defined $data) {
49 1ddd2d4e 2023-09-10 jrmu print " "x$level;
50 1ddd2d4e 2023-09-10 jrmu print basename($path)."\n";
51 1ddd2d4e 2023-09-10 jrmu return;
52 1ddd2d4e 2023-09-10 jrmu }
53 1ddd2d4e 2023-09-10 jrmu print " "x$level;
54 1ddd2d4e 2023-09-10 jrmu print basename($path).":\n";
55 1ddd2d4e 2023-09-10 jrmu foreach (sort keys %$data) {
56 1ddd2d4e 2023-09-10 jrmu dump_data_for_path("$path/$_", $data->{$_}, $level+1);
57 1ddd2d4e 2023-09-10 jrmu }
58 1ddd2d4e 2023-09-10 jrmu }
59 1ddd2d4e 2023-09-10 jrmu chdir "/home/jrmu/documents";
60 1ddd2d4e 2023-09-10 jrmu dump_data_for_path(".", data_for_path("."), 0);