2011-05-04 9 views
5

Soy bastante nuevo en bash, lo siento mucho si esto es una pregunta básica. Estaba tratando de cambiar el nombre de un montón de archivos mp3 para anteponer 1- a sus nombres de archivo, y mv *.mp3 1-*.mp3 no funcionó por desgracia. Así que traté de escritura que, en primer lugar con eco para probar los comandos:Glob cambio de nombre en bash

for f in *.mp3 ; do echo mv \'$f\' \'1-$f\'; done 

que parece salida de los comandos que me gustan, así que me quita el eco, el cambio de la orden de

for f in *.mp3 ; do mv \'$f\' \'1-$f\'; done 

Qué ha fallado. Después probé canalizando los comandos en adelante como tan

for f in *.mp3 ; do echo mv \'$f\' \'1-$f\'; done | /bin/sh 

que funcionó, pero si alguien me podría aclarar por qué el comando central no funciona Me interesaría saber. O si hay un one-liner más elegante que haría lo que yo quisiera, me interesaría ver eso también.

Respuesta

7

Yo creo que hay que cambiar el comando para

for f in *.mp3 ; do mv "$f" "1-$f"; done 

De lo contrario pasaría algo así como 'file1.mp3' y '1-file1.mp3' a mv (incluyendo las comillas simples).

+0

intenté incluir las comillas simples, porque de lo contrario tendría que escapar de todos los espacios con barras diagonales inversas. mv no le importa las comillas. sin embargo, los nombres de archivo también pueden tener 'en ellos (y' para el caso). – wim

+0

No necesita escaparse de los espacios cuando usa comillas dobles alrededor de '$ f'. Tampoco es problema si el nombre de archivo contiene solo o comillas dobles – bmk

7

marcha en seco:

rename -n 's/^/1-/' *.mp3 

Retire la -n si parece correcta para ejecutar el comando. man rename para más detalles.

+1

Esto funciona en Debian pero no en CentOS donde el comando de cambio de nombre no sigue esta sintaxis y es mucho menos poderoso. –