stdin からファイル名を読み取り、システム コマンドを使用して du を呼び出す Perl スクリプトを実行しようとしています。コマンドラインで du コマンドを実行すると問題なく動作しますが、perl スクリプトで system() を使用して du を呼び出すと、「No such file or directory.」というメッセージが表示されます。ファイル名には、perl スクリプトに渡す前にエスケープするスペースとアポストロフィが含まれています。perl スクリプト自体は非常に単純です。
use strict; use warnings;
my $line1;
my @tmutil_args;
while($line1 = <>){
@tmutil_args = ("du", "-sh", $line1);
system(@tmutil_args);
}
また、シェル スクリプトを使用してファイル名をエスケープします。1 行のスクリプトは次のとおりです。
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
重要なことの 1 つは、これを mac OS X 10.95 のターミナル ウィンドウで実行していることです。Perl v5.16.2
あなたは私が何をしようとしているのかと尋ねるかもしれません。個々の Mac TimeMachine バックアップのサイズを取得しようとしています。
誰が私に何が必要か教えてもらえますか?