script de renombrado masivo según patrón [ladrillito]
David
dfb en tinet.org
Mar Sep 20 03:21:39 CDT 2005
Hola,
Tengo un disco duro repleto de megas formato mp3 en sus directorios y
subdirectorios de forma muy bien ordenada xDD y me interesaría poder
renombrar masivamente todos los ficheros de forma recursiva reemplazando
caracteres poco normales (dejando solo letras y/o números sin espacios
ni nada) por más formales, por ejemplo, letras minúsculas y mayúsculas
más números...
Por ejemplo:
Canción $1 - autor 1.mp3 por Cancion1autor1.mp3
(Ver que se ha cambiado la ‘o’ acentuada por una ‘o’ normal, se ha
eliminado el $ y se quitaron también los espacios… puede que reemplazar
la ó por la o sea complicado así que me conformo con quitarla)
Se me ocurre hacerlo con un script ya que no sé de ningún programa que
lo haga ya pero antes de probar scripts y romperlo todo quiero vuestro
consentimiento en parte solo para que se me diga si hay forma
"elegante" de hacer esto ;)
Aquí cosillas :)
------------------------
#!/bin/bash
# esto es para reemplazar espacios por _
find . -name '* *' | sort | while read FILE
do
NEWFILE=`echo ${FILE} | sed 's/ /_/g;'`
mv "${FILE}" ${NEWFILE}
echo ${NEWFILE}
done
------------------------
Visto esto, podría hacer un script similar para reemplazar esos
caracteres raros, pero estoy seguro que hay una forma de hacerlo
directamente... estos scripts los he sacado navegando por ahí, pero no
doy con el que toca.
------------------------
#esto convierte a minúsculas y además cambia espacios por _
rename 'y/A-Z\ /a-z_' *
------------------------
Este me parece a mi más elegante a la par de sencillo, pero sigo sin
poder decirle que deje solo letras...
------------------------
#en definitiva se puede usar rename para reemplazar texto1 por texto2,
ejemplo:
rename 's/texto1/texto2/' *
------------------------
Con este, podría ir reemplazando yo lo que no quiero... pero seguro que
se me escaparía algo :(
------------------------
# o el clásico método del bucle
for i in * ;
do
echo $i ;
echo $i | tr " " "_" ;
mv "$i" `echo $i | tr " " "_"` ;
done
------------------------
Este sigue siendo igualmente válido si pretendo reemplazar los
caracteres raros. Pero sigo pensando que de las dos formas posibles de
hacerlo (o bien dejando los caracteres válidos o bien quitando los
inválidos) el mejor método en este caso es dejar solo los válidos, es
decir, tener un patrón de caracteres válidos y eliminar directamente
aquellos que no lo son...
Sigo buscando pero no encuentro nada :S
Es decir, lo que busco y no encuentro, es dado un patrón de caracteres
válidos, renombrar de forma recursiva los ficheros de un disco duro
aplicando ése patrón.
Por ejemplo:
------------------------
$patron = "[a-z][A-Z][0-9]_"
for i in * ;
do
filtra $i $patron;
done
------------------------
Siendo ‘filtra’ el comando que elimina todos los caracteres del nombre
del fichero que no estén en el patrón.
Alguien me indica por favor dónde puedo mirar para entender de una vez
como funciona lo de las expresiones regulares y ayuda en general sobre
estos comandos?
Estoy seguro que esto se tiene que poder hacer de forma fácil en linux y
más seguro aún que alguien ya lo ha hecho de forma mucho más sencilla de
lo que yo me estoy temiendo :S
A ver si lo consigo y si no.. pues nada... lo haré de otra forma :)
Saludos a todos y muchas gracias por el simple hecho de haber leído
hasta aquí.
p.d. siento que esto parezca una solicitud del tipo "hacedme esto por
mi", en serio... no es mi intención, solo quiero saber o bien porque
alguien me lo diga directamente o bien porque alguien me dé pistas o
bien porque alguien me indique de dónde puedo yo saber en que sitio
buscar para conseguirlo ;) ah! y otra cosa... perdón por el ladrillo.
Más información sobre la lista de distribución ubuntu-es