C'è un modo per cambiare rapidamente tutte le estensioni di tutti i file in una cartella?


14

Ho una grande cartella di audiolibri .m4b che nel loro formato attuale non verranno riprodotti sul mio telefono Android. Tuttavia funzionano bene se vengono rinominati in .m4a

Esiste un metodo rapido o un comando terminale che può rinominare ogni file .m4b in una cartella in .m4a? Non è necessaria alcuna conversione dei file, semplicemente rinominare l'estensione del file funziona perfettamente.


2
Cordiali saluti: renameè uno script PERL e accetta espressioni regolari. Anche i sistemi Debian hanno un rename.ulcomando come parte di util-linux-ng package. Se perl non è installato (ok, altamente improbabile;)) renameanche non lo è.
Rinzwind,

Risposte:


16

Questo farà il lavoro per te.

rename 's/.m4b$/.m4a/' *.m4b

Per un'esecuzione di prova è possibile utilizzare questo comando:

rename 's/.m4b$/.m4a/' *.m4b -vn

-v significa "dettagliato" e genererà i nomi dei file quando li rinomina.

-n eseguirà un test in cui non rinominerà alcun file, ma ti mostrerà un elenco di file da rinominare.


Risposta molto migliore della mia. Ero pigro e cercavo di non usare espressioni regolari ...
Adempewolff,

Grazie, funziona a meraviglia. Grazie anche a @adempewolff per lo sforzo
covernail

10

Un modo molto rapido per rinominare i file, se è tutto ciò che devi fare e non è necessario convertirli in un altro formato, è utilizzare le espansioni dei parametri di Bash, che sono dettagliate molto bene nel wiki di Bash .

Esistono diversi modi per modificare l'estensione, ma qui uso il semplice ${var/original/replacement}paradigma:

for file in *.m4b; do mv -- "${file}" "${file/%m4b/m4a}"; done

Se vuoi vedere cosa sarebbe cambiato dal comando, posizionalo echoprima mve le modifiche verranno elencate.

Inutile dire che questo oneliner può essere modificato anche per altri file e puoi anche utilizzare le espansioni dei parametri per rimuovere anche le estensioni di file.


+1 In questo modo funziona allo stesso modo della risposta di @Basharat Sial tranne che funzionerà anche quando hai molti file corrispondenti *.m4b. Altrimenti colpirai l'errore argument list too long.
Matt brucia il

Inoltre, per vederlo accadere, aggiungi la bandiera dettagliata:for file in *.m4b; do mv -v -- "${file}" "${file/%m4b/m4a}"; done
matt brucia il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.