【发布时间】:2014-01-04 18:03:14
【问题描述】:
是否可以使用rename 将文件大写但排除其扩展名?
即: 我想将文件 foo_bar.ext 重命名为 FOO_BAR.ext
我尝试使用rename 'y/a-z/A-Z/' foo_bar.ext,但整个文件(包括扩展名)变成大写FOO_BAR.EXT
【问题讨论】:
标签: linux rename file-rename
是否可以使用rename 将文件大写但排除其扩展名?
即: 我想将文件 foo_bar.ext 重命名为 FOO_BAR.ext
我尝试使用rename 'y/a-z/A-Z/' foo_bar.ext,但整个文件(包括扩展名)变成大写FOO_BAR.EXT
【问题讨论】:
标签: linux rename file-rename
您要求rename 将[a-z] 的所有实例转换为[A-Z]。相反,将所需的字符串捕获到一个组中并对其进行修改:
rename 's/([^.]*)/\U$1/' foo_bar.ext
这会将文件foo_bar.ext 重命名为FOO_BAR.ext。
如果您有一个文件foo_bar.baz.ext 需要重命名为FOO_BAR.BAZ.ext,请使用贪婪匹配和多个组。说:
rename 's/(.*)(\..*)/\U$1\E$2/' foo_bar.baz.ext
会将文件 foo_bar.baz.ext 重命名为 FOO_BAR.BAZ.ext。
【讨论】:
rename 'y/a-z/A-Z/' foo_bar.ext 不是将文件重命名为大写的一种完全有效的方法?从手册页“要将大写名称转换为小写,您可以使用”rename 'y/A-Z/a-z/' *
您可以使用积极的前瞻:
rename 's/.+(?=\.)/\U$&/g' *
示例:
$ ls
input.foo.bar.txt
$ rename 's/.+(?=\.)/\U$&/g' *
$ ls
INPUT.FOO.BAR.txt
【讨论】: