#!/usr/bin/perl use strict; use warnings; use File::Find; my $basedir = "C:/Test"; open( my $resultfile, '>', 'C:/SomewhereElse/resultfile.dat' ) or die "resultfile.dat: $!"; # the next bit should only be written one time per xml output file: print $resultfile < EOH my @containers; my $indent = ''; find( \&wanted, $basedir ); if ( @containers ) { for ( 0 .. $#containers ) { print "$indent\n"; chop $indent; } } print $resultfile "\n\n"; sub wanted { return if ( /^..?$/ ); if ( -d ) { my ( $root, @levels ) = split m{/}, $File::Find::dir; if ( @levels > @containers ) { # push one level deeper $indent .= " "; print $resultfile "$indent\n"; } elsif ( @levels < @containers ) { # pop out one level print $resultfile "$indent\n"; chop $indent; } elsif ( $levels[-1] ne $containers[-1] ) { # same level, different path print $resultfile "$indent\n"; print $resultfile "$indent\n"; } @containers = @levels; } elsif ( -f _ and -s _ ) { # Note use of "_" (see 'perldoc -f -X') process_file(); } } sub process_file { my $filename = $_; open my $fh, '<', $filename or die "$File::Find::name : $!\n"; my @linecolumns; while (<$fh>) { chomp; my @linecolumns = split; } print $resultfile < $indent $indent $filename $indent SSH $indent $linecolumns[5] $indent $linecolumns[4] $indent Default Settings $indent $linecolumns[9] $indent $indent $indent $indent $indent $indent $indent $indent 1000 $indent 750 $indent 750 $indent 750 $indent $indent $indent $indent $indent $indent $indent $indent $indent $indent False $indent False $indent 10 $indent $indent ETX }