重命名所有“。”到文件名中的“_”,扩展名除外
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 不错!以上是关于重命名所有“。”到文件名中的“_”,扩展名除外的主要内容,如果未能解决你的问题,请参考以下文章