重命名多个顺序文件扩展名

renaming multiple sequential files extension

我在一个目录中有多个顺序文件命名,具有多个增量文件扩展名。我的 objective 正在使用重命名命令仅重命名文件扩展名。

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/change 带有 运行ning 数字序列的扩展名。

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

感谢您的帮助。

继续评论,如果您的所有文件都将 .DAT_XXX 作为您希望按顺序重命名的扩展名,则无需将 ".DAT_" 作为您匹配的模式的一部分.只需匹配文件名末尾的 3 位数字并更改它们,例如

rename 's/\d{3}$/our $i; sprintf("%03d", 1+$i++)/e' *

如果 ".DAT_" 不是唯一的,并且您有其他以 3 位数字结尾的扩展名要避免重命名,那么您可以将 "DAT_" 作为模式匹配和替换的一部分,例如

rename -n 's/DAT_\d{3}/our $i; sprintf("DAT_%03d", 1+$i++)/e' *

(注意: Linux 上有两个不同的“rename”实用程序,第一个作为 [=17 的一部分提供=] 包不支持正则表达式重命名,然后 perl-rename,你有,它支持 perl-regex 重命名。)