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 A
attraverso Z
nel carattere corrispondente nell'intervallo a
attraverso 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 rename
comando 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 find
comando 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 rename
una directory prima di ricorrere in essa ( find -exec rename … {} \;
), find
viene confuso perché è stata trovata una directory ma tale directory non esiste più quando tenta di discenderla. Si può ovviare a questo dicendo find
ad attraversare una directory prima di agire su di esso, ma poi si finisce per cercare di cambiare titolo foo/bar
al FOO/BAR
ma la directory FOO
non 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 zmv
rinomina i file in base a motivi. Esegui autoload -U zmv
una 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 :u
modificatore per convertire il valore in maiuscolo
Come bonus aggiuntivo, questo rispetta le impostazioni locali dell'ambiente.
Se non sei sicuro di un zmv
comando che hai scritto, puoi passare l' -n
opzione per stampare cosa farebbe il comando e non cambiare nulla. Controlla l'output e, se fa ciò che desideri, riesegui il comando senza -n
agire effettivamente.
rename 'y/a-z/A-Z/' *
otterrai quello che vuoi. Attento a dove lo provi.