2012-02-05 11 views
14

Quiero cambiar el nombre de todos los archivos erb en mi proyecto Git a haml (como index.html.erb a index.html.haml)Git:. Cambiar el nombre o mover todos los archivos a la vez

Si cambio el nombre de cada archivo, Tengo que escribir el siguiente comando más de treinta veces.

$ git mv app/views/pages/index.html.erb app/views/pages/index.html.haml 

He probado el siguiente comando, pero no funcionó.

$ git mv app/views/**/*.erb app/views/**/*.haml 

usage: git mv [options] <source>... <destination> 

    -n, --dry-run   dry run 
    -f, --force   force move/rename even if target exists 
    -k     skip move/rename errors 

¿Cómo puedo cambiarles el nombre a la vez?

+0

Es lo mismo que ... y otro comando 'mv'. Mueva los directorios uno a la vez, o escriba un bucle quich bash para hacer lo que está haciendo ahora si no desea mover todos los archivos. –

Respuesta

22
for i in $(find . -iname "*.erb"); do 
    git mv "$i" "$(echo $i | rev | cut -d '.' -f 2- | rev).haml"; 
done 

Para cada archivo .erb, git mv a sí mismo con la extensión ".erb" sustituido por ".haml".

+0

Necesita ajustar el segundo argumento a 'mv' en' "' o no funcionará con nombres de archivos con espacios. –

+0

@Banthar Solo lo notó porque lo entendí en mi primera respuesta :-P. De todos modos, esto no es así. No va a funcionar con nombres de archivo que contengan la comilla, la forma "correcta" es ejecutar los nombres a través de 'printf"% q "' o similar. – Borealid

+0

De hecho, no importa, porque 'for' se dividirá en los espacios de todos modos. Creo que la mejor solución es no poner personajes tontos en sus nombres de archivo. –

Cuestiones relacionadas