16/06/2008

Rinominare molti file da shell.

Spesso capita di dover cambiare nome ad un gruppo di file. Per esempio le foto scaricate dalla fotocamera, il cui nome tipico è IMG_0001.JPG, una serie di documenti, ecc. Qui di seguito trovate le istruzioni per farlo.

Per modificare solo l'estensione di un gruppo di file contenuti nella directory corrente da maiuscolo a minuscolo digitare:

rename 's/.JPG/.jpg/' *.JPG

il viceversa sarà:

rename 's/.jpg/.JPG/' *.jpg

Il primo parametro (.jpg) di rename riguarda cosa ricercare, il secondo (.JPG)cosa sostituire ed il terzo (*.JPG) il gruppo di file in cui effettuare la ricerca.

Per trasformare tutti i caratteri dei file da maiuscoli a minuscoli:

rename 'y/A-Z/a-z/' *

viceversa:

rename 'y/a-z/A-Z/' *

Per modificare solo i nomi dei file digitare:

rename 's/IMG_/2008_/' IMG_*

Dove il primo "IMG_" è il nome da sostituire con "2008_" e "IMG_*" è il gruppo di file che iniziano con "IMG_" in cui effettuare la rinominazione. Se per esempio nella cartella in cui digitiamo da shell questo comando si trovano file .jpg e .png che iniziano con "IMG_" verranno tutti rinominati senza distinzione di formato.

Per togliere l'estensione a tutti i file di un determinato tipo:

rename 's/.bak$//' *.bak

Toglie l'estensione a tutti i file bak.

Per aggiungere dei caratteri all'inizio di ogni file:

rename 's/^/[it]/' *.pdf

Aggiunge a tutti i file pdf presenti nella cartella [it] ed il resto della stringa (l'intero nome del file) vengono riscritti pari pari. Una versione forse più leggibile e corretta è:

rename 's/.*/[it]$&/' *.pdf

che significa letteralmente:
s/ sostituisci
/.*/ qualsiasi stringa formata da 0 o più caratteri
/[it]$&/ con [it] più la stringa che hai trovato

L'istruzione seguente elimina da tutti i nomi dei file pdf [it]:

rename s/[it]// *.pdf

Per aggiungere _g alla fine del nome di tutti i file .png presenti nella cartella corrente digitate:

rename 's/.png$/_g.png/' *.png

Opzioni del comando rename:
-v stampa a video i nomi dei file correttamente rinominati.
-n mostra i nomi dei file che devono essere rinominati senza eseguire nessuna operazione.
-f sovrascrive i file esistenti.

Vi ho elencato solo una serie operazioni che può eseguire il comando rename. Rename è scritto in Perl e se volete creare opzioni comandi più complicati e personalizzati basta che guardiate le espressioni regolari di Perl.

Emanuele

Commenti

ciao
volevo chiederti una cosa riguardo il tuo articolo http://ciaolinux.myblog.it/archive/2008/06/18/rinominare-molti-file-da-shell.html

come si può fare per aggiungere un numero incrementale alla fine del nome?
scusa se posto qui ma lì i commenti sono chiusi

grazie e buone feste

Scritto da: Telecomando | 31/12/2008

Buon 2009.
Scusa ma non mi ero accorto che i commenti in alcuni articoli erano inspiegabilmente chiusi e gli ho aperti tutti (almeno spero...)

Per quello che mi hai chiesto ti consiglio di usare un'interfaccia grafica come:

- Krename se utilizzi KDE: http://ciaolinux.myblog.it/archive/2008/06/30/rinominate-tanti-file-con-krename.html
- PyRenamer che va bene in qualsiasi ambiente grafico: http://ciaolinux.myblog.it/archive/2008/11/08/rinominate-tanti-file-con-pyrenamer.html

Se proprio vuoi usare la shell dovresti usare dei comandi in Bash, se vuoi te li scrivo.. però visto che ci sono i programmi a disposizione mi sembrano la soluzione più veloce...

Ciao da Emanuele

Scritto da: Emanuele | 01/01/2009

niente, alla fine ho comunque usato n programma
grazie

Scritto da: Telecomando | 03/01/2009

Ciao, volevo dirti che
"L'istruzione seguente elimina da tutti i nomi dei file pdf [it]:
rename s/[it]// *.pdf"
così com'è scritta non funziona, o meglio non fa quello che dovrebbe.
quella corretta è:
rename 's/[it]//*' .pdf

Scritto da: sleax | 17/12/2011

Scrivi un commento