重命名所有“。”到文件名中的“_”,扩展名除外

Posted

技术标签:

【中文标题】重命名所有“。”到文件名中的“_”,扩展名除外【英文标题】:Rename all '.' to '_' in a filename except for the extension 【发布时间】:2014-03-16 12:17:50 【问题描述】:

我正在尝试创建一个替换所有“。”的脚本。出现在带有“_”的文件名中。例如,当我尝试替换所有“”符号时,我使用这个:

rename 'y/ /_/' '' file
# test 1.2.jpg -> test_1.2.jpg

效果很好,但是当我尝试使用“。”时扩展名的符号也发生了变化:

rename 'y/./_/' '' file
# test 1.2.jpg -> test 1_2_jpg

如何在不更改扩展名的情况下重命名文件(如果有扩展名)?

【问题讨论】:

when there is one -- 以及如果有的逻辑将应用于图? 如果不是最后一个“.”后面的部分,您将如何定义“扩展名”.. @devnull 很好,例如file 命令可用于确定 mime 类型,然后将其与最后一点之后的字符串进行正则表达式比较。 【参考方案1】:

重命名 -n 's/ \.(?=.*\.)//g' * : -n 无动作。 要实际进行更改,请删除 -n。

【讨论】:

【参考方案2】:

您可以使用前瞻来替换最后一个点之前的所有点:

rename 's/\.(?=[^.]*\.)/_/g' ''

或使用负前瞻:

rename 's/\.(?![^.]*$)/_/g' ''

【讨论】:

不行,文件名test.1.2.jpg被转换成test_1.2.jpg 那么像 .tar.gz 这样的文件呢? :) @Nippey,好问题,但我认为 OP 不会想到这一点。 其实你只需要g开关,现在已经编辑好了。可以试试吗? @anubhava:是的。或者扩展正则表达式来处理这样的期望。开玩笑! ^^ .tgz 不错!

以上是关于重命名所有“。”到文件名中的“_”,扩展名除外的主要内容,如果未能解决你的问题,请参考以下文章

python重命名子目录中的所有文件

匹配所有文件,具有特定扩展名的文件除外

重命名目录中的所有文件[重复]

使用 Windows 批处理脚本重命名目录中的所有文件

使用 Windows 批处理脚本重命名目录中的所有文件

JAVA 使文件件里面的所有文件重命名新文件名(求源代码)