2012-04-07 137 views

回答

4

如果您使用a Perl-based rename(如您的标签所示),则w不是Perl正则表达式操作。

rename -f 's/_/-/g' *_*.mat 
+0

谢谢,@Daxim。我仍然使用骆驼书第一版的Perl'rename'的轻度更新版本。 – 2012-04-07 19:02:05

+0

这项工作!感谢@Leffler。起初我尝试过's',但后来改成'w'。但是我不知道我必须在最终的 – escorciav 2012-04-18 04:23:23

+0

@escorciav:AFAIK处使用g,'w'不是Perl替换运算符。最后的'g'确保所有的下划线都被连字符替代。如果你只想映射第一个下划线,那么你不需要'g'。我想有一个机会,脚本会自动应用'g'。 – 2012-04-18 07:15:29

2

我不明白你是否使用shell重命名或Perl重命名:我不明白你的命令在任何上下文中。

一个Perl的命令行脚本在当前目录重命名所有*.mat文件看起来像这样

perl -e 'do { (my $f = $_) =~ tr/_/-/; rename $_, $f } for glob "@ARGV"' *.mat 
+1

用'@ ARGV'替换'glob“@ARGV”'。你正在通过一些已经被圈起来的东西。这将无论什么都不做,或者根据文件名称给出错误的结果。具体来说,如果任何'mat'文件的名字中有空格,你的模式将失败。 [固定] – ikegami 2012-04-07 20:51:26