¿Hay alguna manera de cambiar rápidamente todas las extensiones de archivo de todos los archivos en una carpeta?

14

Tengo una gran carpeta de audiolibros .m4b que en su formato actual no se reproducirá en mi teléfono Android. Sin embargo, funcionan bien si se les cambia el nombre a .m4a

¿Existe algún método rápido o comando de terminal que pueda cambiar el nombre de cada archivo .m4b de una carpeta a .m4a? No es necesario realizar ninguna conversión de los archivos, simplemente cambiar el nombre de la extensión del archivo funciona perfectamente bien.

cubierta
fuente
2
FYI: renamees un script PERL y acepta expresiones regulares. Los sistemas Debian también tienen un rename.ulcomando como parte de util-linux-ng package. Si Perl no está instalado (ok, muy poco probable;)) renametampoco lo está.
Rinzwind

Respuestas:

16

Esto hará el trabajo por ti.

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

Para una ejecución de prueba, puede usar este comando:

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

-v significa "detallado" y generará los nombres de los archivos cuando los cambie de nombre.

-n realizará una ejecución de prueba en la que no cambiará el nombre de ningún archivo, pero le mostrará una lista de archivos que cambiarían de nombre.

Basharat Sialvi
fuente
Mucho mejor respuesta que la mía. Estaba siendo perezoso y tratar de no utilizar expresiones regulares ...
adempewolff
Gracias, funciona de maravilla. Gracias a @adempewolff por el esfuerzo también
covernail
10

Una forma muy rápida de cambiar el nombre de los archivos, si eso es todo lo que necesita hacer, y no necesita convertirlos a otro formato, es usar las expansiones de parámetros de Bash, que se detallan muy bien en la wiki de Bash .

Hay varias formas diferentes de cambiar la extensión, pero utilizo aquí el ${var/original/replacement}paradigma simple :

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

Si desea ver qué cambiaría el comando, colóquelo echoantes mvy se enumerarán los cambios.

No hace falta decir que este oneliner también podría modificarse para otros archivos, y también puede usar expansiones de parámetros para eliminar también las extensiones de archivo.


fuente
+1 De esta manera funciona igual que la respuesta de @Basharat Sial, excepto que también funcionará cuando coincidan muchos archivos *.m4b. De lo contrario, obtendrá el error argument list too long.
Matt quema el
Además, para ver cómo sucede, agregue la bandera detallada:for file in *.m4b; do mv -v -- "${file}" "${file/%m4b/m4a}"; done
Matt quema el