Lo uso renamesempre. È piuttosto semplice, ma spero che tu conosca la regex di base:
rename "s/SEARCH/REPLACE/g" *
Questo sostituirà la stringa SEARCHcon REPLACEin ogni file (cioè, *). Il /gmezzo è globale, quindi se avessi un SEARCH_SEARCH.jpg, verrebbe rinominato REPLACE_REPLACE.jpg. Se non lo avessi fatto /g, avrebbe fatto la sostituzione solo una volta, e quindi ora chiamato REPLACE_SEARCH.jpg. Se si desidera la distinzione tra maiuscole e minuscole, aggiungere /i(che sarebbe, /gio /igalla fine).
Con le espressioni regolari, puoi fare molto di più.
Si noti che questo renameè il comando prename(noto anche come Perl rename), che supporta espressioni regolari complete Perl. Ce n'è un altro renameche usa schemi e non è così potente. prenameera installato di default su Ubuntu (insieme a Perl), ma ora potresti dover fare:
sudo apt install rename
Ecco alcuni esempi:
Prefisso
Aggiungi :
rename 's/^/MyPrefix_/' *
document.pdf rinominato in MyPrefix_document.pdf
Rimuovi :
Inoltre è possibile rimuovere stringhe indesiderate. Supponiamo che tu abbia 20 file MP3 chiamati like CD RIP 01 Song.mp3e che desideri rimuovere la parte "CD RIP" e che desideri rimuoverli da tutti con un solo comando.
rename 's/^CD RIP //' *
CD RIP 01 Song.mp3 per 01 Song.mp3
Notare lo spazio aggiuntivo in '^CD RIP ', senza lo spazio tutti i file avrebbero uno spazio come primo carattere del file. Inoltre, funzionerà senza il ^carattere, ma corrisponderebbe CD RIP a qualsiasi parte del nome file. La ^garanzia rimuove i caratteri solo se sono l'inizio del file.
Suffisso
Aggiungi :
rename 's/$/_MySuffix/' *
document.pdf rinominato in document.pdf_MySuffix
Cambiamento :
rename 's/\.pdf$/.doc/' *
cambierà Something.pdfin Something.doc. (Il motivo della barra rovesciata è che .è un carattere jolly in regexp, quindi .pdfcorrisponde qPDFmentre corrisponde \.pdfsolo alla stringa esatta .pdf. Inoltre, è molto importante notare che se non si ha familiarità con BASH, è necessario inserire barre rovesciate tra virgolette SINGOLE! Non è possibile omettere le virgolette oppure usa le virgolette doppie, o bash proverà a tradurle. In bash \. ed è "\." uguale .(ma vengono usate virgolette doppie e barre rovesciate, ad esempio "\ n" per una nuova riga, ma poiché "\."non è una sequenza di back escape valida, si traduce in .)
In realtà, puoi anche racchiudere le parti della stringa tra virgolette anziché nel loro insieme: 's/Search/Replace/g'è uguale a s/'Search'/'Replace'/ge s/Search/Replace/gBASH. Devi solo stare attento ai caratteri speciali (e agli spazi).
Ti suggerisco di usare l' -nopzione quando non sei sicuro di avere le espressioni regolari corrette. Mostra ciò che sarebbe stato rinominato, quindi esce senza farlo. Per esempio:
rename -n s/'One'/'Two'/g *
Questo elencherà tutte le modifiche che avrebbe apportato, se non avessi messo la -nbandiera lì. Se ha un bell'aspetto, premere Upper tornare indietro, quindi cancellare -ne premere Enter(o sostituirlo con -vper visualizzare tutte le modifiche apportate).
Nota : le versioni di Ubuntu precedenti alla 17.04 non vengono fornite renameper impostazione predefinita, tuttavia è ancora disponibile nei repository. Utilizzare sudo apt install renameper installarlo