【发布时间】:2012-04-20 18:36:49
【问题描述】:
我正在尝试将一个文件夹内所有文件名.mat 中的所有_ 下划线字符替换为- 连字符字符。
我输入不同的版本失败:
rename -f 'w/_/-' *.mat
谁能给我解释一下怎么回事?
【问题讨论】:
标签: perl shell expression rename
我正在尝试将一个文件夹内所有文件名.mat 中的所有_ 下划线字符替换为- 连字符字符。
我输入不同的版本失败:
rename -f 'w/_/-' *.mat
谁能给我解释一下怎么回事?
【问题讨论】:
标签: perl shell expression rename
如果您使用的是 a Perl-based rename(如您的标签所示),那么 w 不是 Perl 正则表达式操作。
rename -f 's/_/-/g' *_*.mat
【讨论】:
rename 的轻微更新版本。
w 不是 Perl 替换运算符。末尾的g 确保所有下划线都替换为连字符。如果您只想映射第一个下划线,则不需要g。我想,脚本有可能自动应用g。
我无法理解您使用的是 shell 重命名还是 Perl 重命名:在这两种情况下我都无法理解您的命令。
重命名当前目录中所有 *.mat 文件的 Perl 命令行脚本如下所示
perl -e 'do { (my $f = $_) =~ tr/_/-/; rename $_, $f } for glob "@ARGV"' *.mat
【讨论】:
glob "@ARGV" 替换为@ARGV。你正在 globbing 已经被 globbed 的东西。根据文件名,这要么什么都不做,要么给出错误的结果。具体来说,如果任何 mat 文件的名称中有空格,您的模式将失败。 [已修复]