Tengo un directorio con archivos .MP3 que me gustaría cambiar las extensiones a .mp3. ¿Cuál es la forma más fácil de hacer esto? Estoy pensando en algo como:
find /RootPath -type f -iname "*.mp3" -exec mv {} sed s/.*MP3/\1.mp3/ \;
... aunque sé que eso no está del todo bien. :) La sustitución no es correcta y no estoy seguro de cómo usar a mvy un sedcomando con -execin find.
¿Necesitaría un script bash para esto?

En zsh:
Para cuidar
.Mp3o.mP3archivar también:fuente
Podrías usar el comando rename (cuidado, hay dos implementaciones principales con diferentes API) para esos. Por ejemplo, para cambiar el caso de las extensiones de nombre de archivo de arriba a abajo, intente esto:
con
renamefromutil-linux(a veces llamadorename.ul), suponiendo que.JPGocurra solo una vez en los nombres de archivocon
renamefromperl(a veces llamadoprename; se han publicado varias variantes):Aquí hay algunos tutoriales sobre cómo pasó de un script de bash desordenado a este simple comando para su caso de uso.
Otro comando elegante para hacer esto es
pax. Si está utilizando ZSH para su shell, también podría usarlozmv.fuente
syntax error at (user-supplied code), near "."cuando ejecuto este comando.Utilice perl-rename , navaja suiza de cambio de nombre de archivo con expresiones regulares (en ubuntu, esto se incluye con el paquete perl como nombre previo):
Si eres del tipo cuidadoso, usa las opciones -n y -v para cambiar el nombre de Perl y ver qué hará realmente.
fuente
Necesita un script, porque las "extensiones" en Linux son en realidad solo partes de la cadena del nombre del archivo. Tienes que hacer alguna manipulación de cadenas en el script para obtener el nuevo nombre.
Las comillas dobles son importantes si tiene nombres de archivo con espacios en blanco. Pensé que algunas de las comillas dobles eran un poco inocuas.
fuente
En bash:
fuente
primero haga una copia de seguridad de sus archivos! puedes usar una línea de Python:
EDITAR:
Aquí hay una explicación detallada de cómo funciona realmente el one-liner. Usando
python -cestamos pasando un comando al intérprete de Python. Después de importar las bibliotecasospara larenamefunción yglobpara la lista de archivos, necesitamos iterar a través de la lista de archivos en el directorio dado, que llaméPATH_TO_YOUR_DIRECTORY, por ejemplo, algo así como./*para todo en el directorio actual.Desafortunadamente, en la sintaxis de una línea, los
forbucles no funcionan después de laimportnotación, por lo que debemos usar la notación de corchetes. Es decir, por cada archivo o nombre de directorio queglobnos proporciona desde la ruta dada en forma de cadena, reemplazamos * .MP3 por * .mp3.Como OP no mencionó la búsqueda recursiva, no la incluí en primer lugar.
fuente