从perl脚本执行shell命令

时间:2014-09-08 08:18:49

标签: perl shell

我想将* .DIF文件重命名为* .SUC文件 但是下面的脚本给出了“sh:bad substitution”错误 我不能使用“重命名”,因为我的操作系统不是Linux。

$com="for i in *.DIF; do mv \$i \${i/DIF/SUC}; done;";
print $com."\n";
print `$com`;

输出:

for i in *.DIF; do mv $i ${i/DIF/SUC}; done;

sh: bad substitution

3 个答案:

答案 0 :(得分:1)

如果您遇到Perl rename的问题,请使用File::Copy,这是一个独立于平台的模块,用于移动和复制文件。它是一个核心模块,因此它应该已经成为Perl安装的一部分。

如果系统命令在shell中输入时有效,但在Perl中没有,最可能的原因是Perl没有使用你期望的shell。但是,我们需要更多关于您的系统的信息。

答案 1 :(得分:1)

没有必要支持你可以在Perl中轻松完成的文件操作。

以下内容将您的所有.dif个扩展程序文件重命名为.suc

use strict;
use warnings;

use File::Copy qw(move);

move($_, s/dif$/suc/r) for glob('*.dif');

答案 2 :(得分:0)

默认perl使用sh而不是bash,这允许{//} this question有所帮助。 最后我用了:

open my $bash_handle, '| bash' or die "Cannot open bash: $!";
print $bash_handle 'for i in *.SUC; do mv $i ${i/SUC/DIF}; done;';