我想将* .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
答案 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;';