Nota che stai usando lo script Perl chiamatorename distribuito da Debian e derivati (Ubuntu, Mint, ...). Altre distribuzioni Linux forniscono un comando completamente diverso, e molto meno utile, chiamato rename.
y/A-Z/a-z/traduce ogni carattere nell'intervallo Aattraverso Znel carattere corrispondente nell'intervallo aattraverso z, cioè ASCII maiuscoli lettere alla lettera minuscola corrispondente. Per eseguire la traduzione opposta, utilizzare y/a-z/A-Z/. Un altro modo per scrivere lo stesso comando è rename '$_ = uc($_)' *: ucè la funzione u pper c ase e il renamecomando rinomina i file in base alla trasformazione effettuata nella $_variabile.
rename '…' *rinomina solo i file nella directory corrente, perché è quello che *corrisponde. Anche i file Dot (file il cui nome inizia con .) vengono saltati.
Se si desidera rinominare i file nella directory corrente e nelle sottodirectory ricorsivamente, è possibile utilizzare il findcomando per attraversare ricorsivamente la directory corrente. Qui c'è una difficoltà: se chiami rename, questo rinomina sia la directory che la parte del nome di base. Se si chiama renameuna directory prima di ricorrere in essa ( find -exec rename … {} \;), findviene confuso perché è stata trovata una directory ma tale directory non esiste più quando tenta di discenderla. Si può ovviare a questo dicendo findad attraversare una directory prima di agire su di esso, ma poi si finisce per cercare di cambiare titolo foo/baral FOO/BARma la directory FOOnon esiste.
Un modo semplice per evitare questa difficoltà è far sì che il comando di ridenominazione agisca solo sulla parte del percorso del nome base. L'espressione regolare ([^/]*\Z)corrisponde alla parte finale del percorso che non contiene a /.
find . -depth -exec rename 's!([^/]*\Z)!uc($1)!e' {} +
La shell zsh offre funzionalità più convenienti per la ridenominazione, ancora più criptiche di Perl, ma più terse e spesso più facili da comporre.
La funzione zmvrinomina i file in base a motivi. Esegui autoload -U zmvuna volta per attivarlo (inserisci questa riga nel tuo .zshrc).
Nel primo argomento di zmv(il modello da sostituire), puoi usare i potenti modelli jolly di zsh . Nel secondo argomento di zmv(il testo sostitutivo), è possibile utilizzare le sue funzioni di espansione dei parametri , inclusi i modificatori della cronologia .
zmv -w '**/*' '$1$2:u'
Spiegazione:
-w - assegna automaticamente variabili numeriche a ciascun modello jolly
**/*- tutti i file nelle sottodirectory, in modo ricorsivo ( **/corrisponde a 0, 1 o più livelli di sottodirectory)
$1 - la prima variabile numerica, qui corrispondente alla parte della directory di ciascun percorso
$2:u- la seconda variabile numerica, qui corrispondente alla parte del nome di base di ciascun percorso, con il :umodificatore per convertire il valore in maiuscolo
Come bonus aggiuntivo, questo rispetta le impostazioni locali dell'ambiente.
Se non sei sicuro di un zmvcomando che hai scritto, puoi passare l' -nopzione per stampare cosa farebbe il comando e non cambiare nulla. Controlla l'output e, se fa ciò che desideri, riesegui il comando senza -nagire effettivamente.
rename 'y/a-z/A-Z/' *otterrai quello che vuoi. Attento a dove lo provi.