EDIT 2: After learning that aliases aren’t really suited for regex, and trying the script, I thought maybe reloading the .bashrc
file wasn’t enough to refresh the aliases, so I closed my terminal and after reopening the terminal and trying the script again it works just fine.
Okay, I’ve tried searching for help on this and I can’t find anything, and I’m banging my head on my desk trying to figure out how to get this to work.
I routinely have to capitalize the first letter in a series of files that are passed to me. So I’ll get:
file01
file02
And so on. I use perl rename (I’m using Fedora) with the following command and regex, and from within the directory it works as expected:
prename 's/(^[a-z]?)/\U$1/' *
I do this a lot. At least once a day, which calls for an alias or script.
I tried adding it as an alias to my .bash_aliases
like so:
alias cap="prename 's/(^[a-z]?)/\U$1/' *"
And when I do, instead of capitalizing the first letter of the filenames it removes them. Searching got me nothing, in part because I probably am not asking the right question.
So then thought I’d write a dead simple bash script named cap
(after removing the alias and reloading .bashrc
)
#! /bin/bash
prename 's/(^[a-z]?)/\U$1/' *
And when I use cap
in the directory, the script also cuts off the first letter instead of capitalizing it.
I suspect it’s the $1
variable in the regex that’s causing the problem, but I can’t figure out how to address it so it works correctly in the alias or the script.
EDIT: I just tried some more searching and found that regex won’t work in aliases, so it explains that, but I still can’t figure out how to get it to work in the script.
Try defining a function instead of an alias in your
.bashrc
:function capitalize() { prename 's/(^[a-z]?)/\U$1/' * }
i’d probably do
function cap() { prename 's/(^[a-z]?)/\U$1/' "$@" }
it means it has to be invoked as
cap *
, but it also means that you can docap foo*
or whatever