veilig
veilig

Reputation: 5135

How to uppercase file name but exclude extension

Is it possible to use rename to uppercase a file but exclude its extension?

ie: I want to rename the file foo_bar.ext to FOO_BAR.ext

I tried with rename 'y/a-z/A-Z/' foo_bar.ext, but the whole file (including extension) gets uppercased FOO_BAR.EXT

Upvotes: 2

Views: 879

Answers (2)

s.ouchene
s.ouchene

Reputation: 1869

You can use positive lookahead:

rename 's/.+(?=\.)/\U$&/g' *

Example:

$ ls
input.foo.bar.txt

$ rename 's/.+(?=\.)/\U$&/g' *
$ ls
INPUT.FOO.BAR.txt

Upvotes: 1

devnull
devnull

Reputation: 123478

You are asking rename to convert all the instances of [a-z] to [A-Z]. Instead, capture the desired string into a group and modify it:

rename 's/([^.]*)/\U$1/' foo_bar.ext

This would rename the file foo_bar.ext to FOO_BAR.ext.


If you have a file foo_bar.baz.ext that needs to be renamed to FOO_BAR.BAZ.ext, use greedy match and multiple groups. Saying:

rename 's/(.*)(\..*)/\U$1\E$2/' foo_bar.baz.ext

would rename the file foo_bar.baz.ext to FOO_BAR.BAZ.ext.

Upvotes: 3

Related Questions