我正在尝试运行一个 Perl 脚本,该脚本从标准输入读取文件名并使用系统命令调用 du。当我在命令行上运行 du 命令时,它工作正常,但是当使用 system() 在 perl 脚本中调用 du 时,我得到“没有这样的文件或目录”。文件名确实有空格和撇号,我在将其传递到 perl 脚本之前对其进行了转义。perl 脚本本身非常简单:
use strict; use warnings;
my $line1;
my @tmutil_args;
while($line1 = <>){
@tmutil_args = ("du", "-sh", $line1);
system(@tmutil_args);
}
我还使用 shell 脚本来转义文件名。一行脚本如下:
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 上运行它。Perl v5.16.2
你可能会问我想做什么。我正在尝试获取单个 Mac TimeMachine 备份的大小。
所以谁能告诉我我需要什么?