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