Här visar jag lite olika lösningnar på hur man kan ändra namnen på filerna.
Om man tex vill byta alla *.JPG till att bli *.jpg så kan man göra det så här, först kolla man vilka filer som kommer att ändras:
for filnamn in *.JPG; do filnamn=./"${filnamn// /\\ }"; echo "$filnamn" '->' "${filnamn/.JPG/.jpg}";done
Denna del filnamn=./"${filnamn// /\\ }" sätter in en \ före alla melanslag i filnamnet och skriver över grundvariabeln filnamn med det nya värdet. /. delen ser till så att ett namn som startar med ett bindesträck inte av misstag tolkas som en flagga till kommandot. När man sedan kör mv och omsluter filnamnen med " " så lägger mv in \ där det behövs automatiskt och man behöver inte försöka att själv hantera mellanslagen i filnamnen.
Om det är de filer man vill ändra så gör man ändringen så här:
for filnamn in *.JPG; do mv -v ./"$filnamn" ./"${filnamn/.JPG/.jpg}";done
-v gör att det visas vilka filer som har bytt namn.
Några varianter med förklaringar:
echo $s
.jpghej.jpg
Så ser variabeln s ut i sin grund .
echo ${s/.jpg/.JPG}
.JPGhej.jpg
Byter ut första
echo ${s//.jpg/.JPG}
.JPGhej.JPG
Byter ut alla(även om det fanns en i mitten)
echo ${s/%.jpg/.JPG}
.jpghej.JPG
Byter ut den sista (även om det fanns en i mitten)
om man skippar utbytesdelen så tar man helt enkelt bort den/de delar som man annars förändrade.