No seu script perl, os nomes dos arquivos são lidos de um arquivo com foreach (<CONFIGFILE>)
e adicionados a uma matriz com push(@backup,$2);
. Para cada item na matriz ( foreach $path (@backup)
), a sub-rotina do_backup()
é chamada e o nome do arquivo é o parâmetro $backup
. Isso é usado inalterado na configuração de $tarcmd
, como você observou. A solução é, portanto, editar essa variável logo antes dessa linha:
$backup =~ s|/|| if $backup =~ m|^['"]?/|; # remove any leading slash
my($tarcmd) = "$tar -czf $backupname -C / $args $backup";
Isso substituirá ( s|/||
) a primeira barra por nada, se a variável corresponder ao padrão ^['"]?/
, ou seja, no início, uma cotação ou aspas duplas possíveis e, em seguida, uma barra. Isso ocorre porque o código anterior pressupõe que o caminho fornecido nessa variável pode estar entre aspas, por exemplo, para proteger os espaços.
No entanto, você só pode fazer isso e adicionar o -C /
se o caminho começar com barra, então, a menos que você tenha certeza que este é o caso, você provavelmente deve ter 2 versões, por exemplo
my($tarcmd);
if($backup =~ m|^['"]?/|){
$backup =~ s|/||; # remove any leading slash
$tarcmd = "$tar -czf $backupname -C / $args $backup";
}else{
$tarcmd = "$tar -czf $backupname $args $backup";
}