2011-12-18 9 views
8

Estoy desarrollando un launchdaemon simple que copia archivos de un directorio a otro. He conseguido que los archivos se transfieran bien.¿Cambiar las extensiones de archivo de varios archivos en un directorio con terminal/bash?

sólo quiero los archivos en el directorio para ser .mp3 del lugar de la

Algunos de los archivos .dat tener este aspecto:

6546785.8786.dat
3678685.9834.dat
4,658,679.4375. dat

quiero que se ven así:

6546785.8786.mp3
3678685.9834.mp3
4658679.4375.mp3

Esto es lo que tengo al final de la secuencia de comandos bash para cambiar el nombre de las extensiones de archivo.

cd $mp3_dir 
mv *.dat *.mp3 
exit 0 

El problema es que el archivo sale como * .mp3 en lugar de 6546785.8786.mp3

y cuando otro archivo 6546785.8786.dat ha sido importada a $ mp3_dir, el * .mp3 se sobrescribe con la nueva .mp3

Necesito cambiar el nombre a solo las extensiones de archivo .dat a .mp3 y mantener el nombre del archivo.

Ideas? Sugerencias?

Respuesta

27

Probar:

for file in *.dat; do mv "$file" "${file%dat}mp3"; done 

O, si su cáscara tiene que:

rename .dat .mp3 *.dat 

Ahora, ¿por qué su comando no funcionó: en primer lugar, es más que seguro que sólo tenía un archivo en su directorio cuando se renombró a *.mp3; de lo contrario, mv habría fallado con *.mp3: not a directory.

Y mv NO hace magia con file globs, es el shell que expande globs. Lo que significa que, si usted ha tenido este archivo en el directorio:

t.dat 

y que has proporcionado:

mv *.dat *.mp3 

la cáscara se habría expandido *.dat-t.dat. Sin embargo, como nada se correspondería con *.mp3, la cáscara habría dejado tal cual, es decir, el comando es totalmente expandido:

mv t.dat *.mp3 

que creará un archivo llamado, literalmente, *.mp3.

Si, por el contrario, que tenían varios archivos denominados *.dat, como en:

t1.dat t2.dat 

el comando se habría expandido a:

mv t1.dat t2.dat *.mp3 

Pero esto se producirá un error: si hay más de dos argumentos para mv, espera que el último argumento (es decir, *.mp3) sea un directorio.

+0

Eso funcionó muy bien. Juro que pensé que busqué en toda la internet la respuesta correcta. Muchas gracias. Ahora necesito averiguar cómo nombrar este .mp3 al nombre de la canción automáticamente. – CokePokes

+0

No hay problema :) Consulte también la edición, hay otro comando más agradable para hacerlo. Y no olvides aceptar la respuesta;) – fge

+3

+1. Si coloca variables en "doble cita", también funcionará para nombres de archivo con espacios. –

15

Para cualquier persona en un mac, esto es bastante fácil si tiene BREW, si no tiene cerveza, mi consejo es que la obtenga. a continuación, cuando se instala simplemente hacer esto

$ brew install rename 

continuación, cambiar el nombre de una vez se ha instalado sólo tiene que escribir (en el directorio donde están los archivos)

$ rename -s dat mp3 * 
Cuestiones relacionadas