我在一个目录中命名了多个顺序文件,扩展名为多个增量文件。我的目标是使用重命名命令仅重命名文件扩展名。
IBM0020.DAT_001
IBM0020.DAT_002
IBM0020.DAT_003
IBM0021.DAT_001
IBM0021.DAT_002
IBM0022.DAT_001
IBM0022.DAT_002
IBM0022.DAT_003
IBM0022.DAT_004
...
到
IBM0020.DAT_001
IBM0020.DAT_002
IBM0020.DAT_003
IBM0021.DAT_004
IBM0021.DAT_005
IBM0022.DAT_006
IBM0022.DAT_007
IBM0022.DAT_008
IBM0022.DAT_009
...
我已经空运行了以下命令,但没有达到预期的结果。我想保留文件名,并且只使用运行编号顺序重命名/更改扩展名。
rename -n 's/.+/our $i;sprintf(".DAT_%03d",1+$i++)/e' *
IBM0020.DAT_001 renamed as .DAT_001
IBM0020.DAT_002 renamed as .DAT_002
IBM0020.DAT_003 renamed as .DAT_003
IBM0021.DAT_001 renamed as .DAT_004
IBM0021.DAT_002 renamed as .DAT_005
IBM0022.DAT_001 renamed as .DAT_006
IBM0022.DAT_002 renamed as .DAT_007
IBM0022.DAT_003 renamed as .DAT_008
IBM0022.DAT_004 renamed as .DAT_009
感谢您的帮助。
答案 0 :(得分:1)
从注释继续,如果您的所有文件都具有.DAT_XXX
作为您希望顺序重命名的扩展名,则无需将".DAT_"
包含在您要匹配的模式中。只需匹配文件名末尾的3位数字,然后更改这些数字即可,例如
rename 's/\d{3}$/our $i; sprintf("%03d", 1+$i++)/e' *
如果".DAT_"
不是唯一的,并且您有其他扩展名都以3位数字结尾,则希望避免重命名,那么您可以将"DAT_"
作为匹配和替换的模式的一部分,例如,< / p>
rename -n 's/DAT_\d{3}/our $i; sprintf("DAT_%03d", 1+$i++)/e' *
(注意:Linux上有两种常用的“ rename
”实用程序,第一种作为util-linux
软件包的一部分提供,不支持正则表达式重命名,然后您拥有的perl-rename
确实支持perl-regex重命名。)