私はPerlを愛し始めていますが、ここで何が起こっているのか分かりません。@arrayにfindコマンドが含まれているとシステム(@array)が動作しないのはなぜですか?
なぜこの作品が出力
find data/path/ -name *.xml -exec mv {} junk/path/ \;
検索からエラーなし
my @cmd =();
push @cmd, 'find';
push @cmd, 'data/path/';
push @cmd, "-name";
push @cmd, '*.xml';
push @cmd, '-exec';
push @cmd, 'mv';
push @cmd, '{}';
push @cmd, 'junk/path/';
push @cmd, '\;';
say join (' ', @cmd);
system(join(' ', @cmd));
ん!これは動作しませんが
my @cmd =();
push @cmd, 'find';
push @cmd, 'data/path/';
push @cmd, "-name";
push @cmd, '*.xml';
push @cmd, '-exec';
push @cmd, 'mv';
push @cmd, '{}';
push @cmd, 'junk/path/';
push @cmd, '\;';
say join (' ', @cmd);
system(@cmd);
出力:
find data/path/ -name *.xml -exec mv {} junk/path/ \;
find: Missing argument for »-exec«.
system
は配列を理解することができるはずです。 hereを参照してください。シェルに出力をコピーすると、引数が足りないので、うまくいきます。しかし、私のスクリプトはこれを実行できません。
が、それはあなたの第2のプッシュ(データ/パスについては、/)を持っていないことをタイプミスです:代わりに外部コマンドを実行するには、
find
ユーティリティと非常によく似ているインターフェイスを備えていFile::Find::Ruleを、使用することができます最初のケースで引用しますか? – AntonHサイドノート:これらの 'push 'ステートメントの代わりに' my @cmd = qw(データ/パス/ -name * .xml -exec mv {}ジャンク/パス/ \;); 'を実行することができます。 – ThisSuitIsBlackNot
^^(あなたのパスに空白が含まれていないと仮定します) – ThisSuitIsBlackNot