$ ./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