$ ./11.clone.pl 2.med 1.english 1.pop ------------- making directories abs to template is /home/bob/1.scripts/pages/1.english/template_stuff string abs from is /home/bob/1.scripts/pages/2.med/template_stuff ------------- ... ------------- dollar one is 1 munge is 1.english1.css name is /home/bob/1.scripts/pages/1.english/template_stuff/1.english1.css return2 is /home/bob/1.scripts/pages/1.english/template_stuff/1.english1.css ------------- matched is /home/bob/1.scripts/pages/2.med/2.med1.pl b is /home/bob/1.scripts/pages/1.english/1.english1.pl return3 is /home/bob/1.scripts/pages/1.english/1.english1.pl end of clone ... $ cat 11.clone.pl #!/usr/bin/perl -w use 5.011; use utf8; use open qw/:std :utf8/; use Path::Tiny; # This script clones the template directory in $1 to $2. # Some names need munging. # $from is a populated child directory; $to is child dir to be created. $pop is the folder with the data. my ( $from, $to, $pop ) = @ARGV; my $ts = "template_stuff"; my $current = Path::Tiny->cwd; #say "current is $current"; say "-------------"; say "making directories"; # define the paths within the target directory: my $abs_to = path( $current, $to, $ts ); $abs_to->mkpath; say "abs to template is $abs_to"; # $from template directory: my $abs_from = path( $current, $from, $ts ); say "string abs from is $abs_from"; say "-------------"; say "copying files"; foreach my $child ( $abs_from->children(qr/\.(txt|pm|css|tmpl|pl|sh)$/)) { next unless $child->is_file; my $base = $child->basename; #syntax is from to to my $return = path($child)->copy( $abs_to, $base ); if ($base =~ m/\.(pl|sh)$/) { $return->chmod(0755); } say "return is $return"; } say "-------------"; # copy css file to template with munged name foreach my $child ( $abs_from->children ) { my $base = $child->basename; if ( $base =~ m/^$from(\d*)\.css$/ ) { #say "matching is $base"; say "dollar one is $1"; my $munge = $to . "1" . ".css"; say "munge is $munge"; my $name = path( $abs_to, $munge ); say "name is $name"; #syntax is from to to my $return = path( $abs_from, $base )->copy($name); say "return2 is $return"; } } ## munge and copy executable, change permissions say "-------------"; my $d = path( $current, $from ); # @matching will be an array of Path::Tiny objects my @matching = $d->children(qr/$from(\d*)\.pl$/i); @matching = sort @matching; say "matched is @matching"; my $winner = pop @matching; my $newfile = "${to}1.pl"; my $b = path( $current, $to, $newfile ); print "b is $b\n"; # $winner will already be a Path::Tiny object my $return3 = $winner->copy("$b"); say "return3 is $return3"; $return3->chmod(0755); say "end of clone"; my $abs_pop = path( $current, $pop, $ts ); say "string abs pop is $abs_pop"; my $string_pop = "$abs_pop"; foreach my $child ( $abs_pop->children ) { next unless $child->is_dir; say "e is $child"; my $base_dir = $child->basename; say "base dir is $base_dir"; my @dirs = path( $current, $to, $ts, $base_dir )->mkpath; say "dirs are @dirs"; my $pop_from = $child; next if( $child =~ m/logs/); foreach my $pchild ( $pop_from->children ) { say "default is $pchild\n"; my $base = $pchild->basename; say "base is $base"; my $to_name = path( @dirs, $base ); say "to name is $to_name"; my $return4 = path($pchild)->copy($to_name); say "return4 is $return4"; } } my $exec_path = path( $current, $to ); my $return5 = chdir($exec_path); say "return5 is $return5"; system("pwd "); system("ls "); #system ("./$newfile "); $ $ #### my ( $from, $to, $pop ) = @ARGV; say "argv is @ARGV"; #### my $encoded_from = url_encode($from); say "encoded cyrillic is $encoded_from"; $from = Encode::decode( 'utf8', uri_unescape($encoded_from) ); say "from is $from"; my $encoded_to = url_encode($to); say "encoded cyrillic is $encoded_to"; $to = Encode::decode( 'utf8', uri_unescape($encoded_to) ); say "to is $to"; my $encoded_pop = url_encode($pop); say "encoded cyrillic is $encoded_pop"; $pop = Encode::decode( 'utf8', uri_unescape($encoded_pop) ); say "pop is $pop"; #### $ pwd /home/bob/1.scripts/pages/2.дом $ ls 2.дом1.html 2.дом1.pl.bak 2.дом3.html 2.дом5.html template_stuff 2.дом1.pl 2.дом2.html 2.дом4.html 2.дом6.html