После выполнения
my $string= "rsync -va ~/Dropbox/Music\ \(1\)/ ~/Music/Music/";
вы увидите, что $string
содержит
rsync -va ~/Dropbox/Music (1)/ ~/Music/Music/
Это не та команда, которую вы хотите выполнить.\
специально для строковых литералов в двойных кавычках Perl (среди прочих).Чтобы создать строку
rsync -va ~/Dropbox/Music\ \(1\)/ ~/Music/Music/
Вам понадобится
$string = "rsync -va ~/Dropbox/Music\\ \\(1\\)/ ~/Music/Music/";
В качестве альтернативы, используйте форму с несколькими аргументами system
.Поскольку оболочка не задействована, вам не нужно беспокоиться о создании строковых литералов для оболочки.
my $src = $ENV{HOME}.'/Dropbox/Music (1)/';
my $dst = $ENV{HOME}.'/Music/Music/';
system('rsync', '-va', $src, $dst);