Я пытаюсь запустить сценарий Perl, который считывает имена файлов из стандартного ввода и вызывает du с помощью системной команды. Когда я запускаю команду du в командной строке, она работает нормально, но когда du вызывается в сценарии perl с помощью system(), я получаю «Нет такого файла или каталога». В имени файла есть пробелы и апостроф, которые я избегаю перед передачей в скрипт perl. Сам perl-скрипт ОЧЕНЬ прост:
use strict; use warnings;
my $line1;
my @tmutil_args;
while($line1 = <>){
@tmutil_args = ("du", "-sh", $line1);
system(@tmutil_args);
}
Я также использую сценарий оболочки, чтобы избежать имени файла. Однострочный скрипт выглядит следующим образом:
s/[\' ]/\\&/g
пример имени файла до и после его запуска через sed:
/Volumes/Mac Mini Backup 4TB/Backups.backupdb/John's Mac Mini/2015-06-04-132645
/Volumes/Mac\ Mini\ Backup\ 4TB/Backups.backupdb/Pete\'s\ Mac\ Mini/2015-06-04-132645
Я пробовал с пробелами и апострофом и без них.
вывод:
du: /Volumes/Mac\ Mini\ Backup\ 4TB/Backups.backupdb/Pete\'s\ Mac\ Mini/2015-06-04-132645
: No such file or directory
одна важная вещь, я запускаю это на Mac OS X 10.95 в окне терминала. Перл v5.16.2
Вы можете спросить, что я пытаюсь сделать. Я пытаюсь получить размер отдельных резервных копий Mac TimeMachine.
так может ли кто-нибудь сказать мне, что мне нужно?
quotemeta
твой друг здесь. perldoc.perl.org/functions/quotemeta.html - person Sobrique   schedule 05.06.2015system
вам не нужно экранировать имена файлов. - person Jim Davis   schedule 05.06.2015