Actualmente estoy luchando con algunas carpetas de música. Una vez decidido nombrarlos siguiendo el patrón: artist - album - year. Hoy me di cuenta de que este no era un movimiento inteligente y ahora quiero nombrar a mis directorios siguiendo el patrón: year - artist - albumya que aparecerán en orden ascendente cuando estén en la lista.
Comencé a renombrar a mano pero, con aproximadamente 700 carpetas, tiene que haber una manera más simple; Traté de usar gprenamepero no soy tan bueno en expresiones regulares y bash scripting ...
¿Hay alguien que pueda ayudarme a ahorrar mis pobres dedos?
Algunos ejemplos:
Aes Dana - Memory Shell - 2004
Anja Schneider & GummiHz - Back To Back (Remixes Part 2) - 2009
se convertiría
2004 - Aes Dana - Memory Shell
2009 - Anja Schneider & GummiHz - Back To Back (Remixes Part 2)
EDITAR: Algunos nombres de artistas y álbumes tienen caracteres especiales como And.Ido Kool & The Gang. Aunque cada directorio tiene -como separador.
fuente

-en ellos?Respuestas:
Suponiendo que tiene acceso a perl
rename(generalmente disponible en Ubuntu, gracias a @Serg por aclarar la diferencia. En caso de duda, llame/usr/bin/renamey debería obtener la correcta), puede usar:Eliminar
-ndespués de la prueba para cambiar el nombre de los directorios. Esto supone que todos los álbumes datan entre 1000 y 9999. Probablemente razonable ...Explicación
s/old/newreemplazaroldconnew(.*)guardar cualquier número de caracteres para referenciarlos más$1tarde(\d{4})\/guarde cuatro dígitos al final de la línea para hacer referencia como$2más adelante.*/hacer coincidir todos los directorios (no los archivos, ¡gracias a @muru por su ayuda!)fuente
*/para que solo coincidan los directorios.mkshtienen una llamada incorporadarename. Es suficiente reemplazarlo con la ruta completa o llamarprenamepara llamar al cambio de nombre de Perlrename"a veces no se llamaprename" pero aparentemente son dos "ramas" del mismo script, una que no se mantiene por Debian, y el otro que es. Así que sí . . . es todo un desastre: algunos proyectiles tienen el suyorename, el paquete perl tiene el suyorename, y Debian proporciona un paquete separadorename.ulen unix.stackexchange.com/q/229230/21167El script simple de Python puede hacer ese trabajo:
Contenido del guión:
Cómo funciona esto:
*/a proporcionar solo directorios como argumentos para el script-carácter. El nuevo nombre de archivo se construye a partir de partes que extrajimos.move()función delshutilsmódulo es lo que realmente cambia el nombre de los directoriosTenga en cuenta el uso:
./rename_dirs.py */fuente