touch /a/b/c/d1
####
mkdir -p /tmp/a/b/c
cp /a/b/c/d1 /tmp/a/b/c
# Or: rsync -a $USER@MACHINE:/a/b/c/d1 /tmp/a/b/c
##
##
sub escape {
my ($path) = @_;
if ($path =~ /\\/) {
$path =~ s/\\/\\\\/g;
}
if ($path =~ /\$/) {
$path =~ s/\$/\\\$/g;
}
return $path;
}
sub wrap_with_quotes {
my ($path) = @_;
if ($path =~ /( |\;|\!)/) {
return '"'.$path.'"';
}
return $path;
}
##
##
sub escape {
my ($path) = @_;
my $new_path = quotemeta($path);
$new_path =~ s/\\\//\//g;
return $new_path;
}
##
##
foreach my $dir (sort(keys(%dirs))) {
$dir = escape($dir);
$dir = wrap_with_quotes($dir);
print("mkdir -p /tmp/$dir\n");
}
foreach my $file (sort(keys(%files))) {
my $parent_dir = dirname($file);
my $abs_path = abs_path($file);
$abs_path = escape($abs_path);
$abs_path = wrap_with_quotes($abs_path);
$parent_dir = escape($parent_dir);
$parent_dir = wrap_with_quotes($parent_dir);
print("cp $abs_path /tmp/$parent_dir\n");
}
foreach my $file (sort(keys(%remote_files))) {
my $parent_dir = dirname($file);
my $abs_path = abs_path($file);
my $host = get_host();
$abs_path = escape($abs_path);
$abs_path = wrap_with_quotes($abs_path);
$parent_dir = escape($parent_dir);
$parent_dir = wrap_with_quotes($parent_dir);
print("rsync -a $host$abs_path /tmp/$parent_dir\n");
}
##
##
declare -a special_chars=("!" "@" "#" "$" "%" "^" "_" "-" "=" "+" "[" "]" "(" ")" "{" "}" "'" ":" "," "." ";" " " "\"" "<" ">")
if [ "$1" == 1 ]; then # create playground (before running the bash script)
for special_char in "${special_chars[@]}"; do
mkdir -p "/test1/a${special_char}b"
touch "/test1/a${special_char}b/data"
done
else # test playground output (after running the bash script)
for special_char in "${special_chars[@]}"; do
mkdir -p "/tmp/test1/a${special_char}b"
if [ "$?" -ne 0 ]; then
exit 1
fi
done
fi