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 - album
ya 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 gprename
pero 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.Id
o 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/rename
y debería obtener la correcta), puede usar:Eliminar
-n
despué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/new
reemplazarold
connew
(.*)
guardar cualquier número de caracteres para referenciarlos más$1
tarde(\d{4})\/
guarde cuatro dígitos al final de la línea para hacer referencia como$2
más adelante.*/
hacer coincidir todos los directorios (no los archivos, ¡gracias a @muru por su ayuda!)fuente
*/
para que solo coincidan los directorios.mksh
tienen una llamada incorporadarename
. Es suficiente reemplazarlo con la ruta completa o llamarprename
para 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.ul
en 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 delshutils
módulo es lo que realmente cambia el nombre de los directoriosTenga en cuenta el uso:
./rename_dirs.py */
fuente