#!/usr/bin/perl use strict; my $sourcedir = shift; my $targetdir = shift; die "sourcedir ($sourcedir) does not exist" unless ( -e $sourcedir && -d $sourcedir ); die "targetdir ($targetdir) does not exist" unless ( -e $targetdir && -d $targetdir ); open(FILES, " find $sourcedir -type f |") or die("unable to setup pipe from find on sourcedir"); my @files; while () { chomp; die "missing prefix for file $_" if ( substr($_, 0, length($sourcedir)+1) ne "$sourcedir/" ); my $filename = substr($_, length($sourcedir)+1); next if ( $filename =~ m{^admin/temp/} ); next if ( $filename =~ m{^drhconfig/} ); next if ( $filename =~ m{^admin/includes/config.php} ); push @files, $filename; } foreach my $this_file ( sort @files ) { my $basename = $this_file; if ( $basename =~ s{/[^/]+$}{} && ! -e "$targetdir/$basename" ) { system("mkdir", "-p", "$targetdir/$basename") == 0 or die("error with mkdir -p for $targetdir/$basename"); } system("cp", "$sourcedir/$this_file", "$targetdir/$this_file") == 0 or die("error with copy command with file $this_file"); }