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

时间:2019-06-28 02:58:49

标签: linux rename sequential-number

我在一个目录中命名了多个顺序文件,扩展名为多个增量文件。我的目标是使用重命名命令仅重命名文件扩展名。

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

感谢您的帮助。

1 个答案:

答案 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重命名。)