Etiquetas: fotos, linux, renombrar, script, terminal, videos
Los que me conocéis informáticamente hablando, sabéis que, como dice Elrohir, soy un linux terminal cowboy, o lo que es lo mismo, un oscuro adorador de la línea de comandos. Si puedo hacer algo por línea de comandos, por norma general lo prefiero antes que hacerlo a golpe de ratón, porque es mucho más rápido, más eficiente y, para mí, más cómodo. Ya demostré muchas veces ante amigos que este método nos facilita mucho la vida si tenemos que hacer tareas repetitivas, y una vez más volví a demostrarlo. Al turrón.
Después de unos cuantos años me di cuenta de que el método que uso para nombrar los vídeos y fotos que grabo no es el más adecuado a la hora de almacenarlos en el ordenador. Hasta ahora usaba nombres del tipo lugarexacto, lugargeneral, dd-mm-aaaa (tema).jpg, poniendo el mes en números romanos. Por ejemplo, Restaurante Candilejas, Vigo, 9-II-2005 (Pepito de los palotes y su prima).jpg. Este nombre tiene varios problemas. El primero es que si sacamos una foto el día 23 en el mismo sitio, esa foto saldrá antes, ya que el 2 va alfabéticamente antes que el 9. Además, si sacamos una foto el 8 de cualquier mes o cualquier año, seguirá yendo antes que ese 9 de febrero. Otro inconveniente es que al poner el mes en números romanos, septiembre (IX para los no duchos xD) irá antes que mayo (V). Para solucionarlo, la mejor forma sería poner los nombres con el formato lugarexacto, lugargeneral, aaaa-mm-dd (tema).jpg, con el mes en decimal. Pero claro, es muy fácil decirlo, pero agobia un poco más si tenemos en cuenta que entre vídeos y fotos tenía almacenados unos 3500, y eso son muchos nombres de dios para cambiar.
¿Qué hacemos? ¿Nos pegamos un tiro porque no podemos cambiar todo ésto ni en 2 años? Nada más lejos de la realidad. En 4 minutos me curré un script que cambió todos esos nombres por mi, y en sólo unos minutos ya tenía todo con los nombres con el formato que quería. Es una de las ventajas de ser un linux terminal cowboy, estas cosas están a la orden del día
. Aquí os dejo el script, que aunque no vayáis a hacer esto en concreto, seguro que podéis retocarlo para algo que necesitéis (Por supuesto, es mejorable, pero lo único que quería era acabar cuanto antes xD).
#!/bin/bash
mkdir procesados
mkdir salida
for i in [ *.jpg *.JPG *.jpeg *.JPEG *.bmp *.BMP *.gif *.GIF *.avi *.AVI ] ; do
#Nos hacemos con el nombre del fichero y de ahi, con la parte de la fecha
nombre1=$i
fecha1=`echo $nombre1 | cut -d ',' -f3`
fecha1=`echo $fecha1 | cut -d ' ' -f1`
#Separamos la fecha en 3 variables: dia, mes y año
dia=`echo ${fecha1} | cut -d '-' -f1`
mes=`echo ${fecha1} | cut -d '-' -f2`
anho=`echo ${fecha1} | cut -d '-' -f3`
#Pasamos los días de la forma d a dd
if [ $dia = "1" ]; then dia="01" ; fi
if [ $dia = "2" ]; then dia="02" ; fi
if [ $dia = "3" ]; then dia="03" ; fi
if [ $dia = "4" ]; then dia="04" ; fi
if [ $dia = "5" ]; then dia="05" ; fi
if [ $dia = "6" ]; then dia="06" ; fi
if [ $dia = "7" ]; then dia="07" ; fi
if [ $dia = "8" ]; then dia="08" ; fi
if [ $dia = "9" ]; then dia="09" ; fi
#Pasamos los meses en números romanos a decimal
if [ $mes = "I" ]; then mes="01" ; fi
if [ $mes = "II" ]; then mes="02" ; fi
if [ $mes = "III" ]; then mes="03" ; fi
if [ $mes = "IV" ]; then mes="04" ; fi
if [ $mes = "V" ]; then mes="05" ; fi
if [ $mes = "VI" ]; then mes="06" ; fi
if [ $mes = "VII" ]; then mes="07" ; fi
if [ $mes = "VIII" ]; then mes="08" ; fi
if [ $mes = "IX" ]; then mes="09" ; fi
if [ $mes = "X" ]; then mes="10" ; fi
if [ $mes = "XI" ]; then mes="11" ; fi
if [ $mes = "XII" ]; then mes="12" ; fi
#Reordenamos el formato de la fecha en una variable de la forma aaaa-mm-dd
fecha2=`echo ${anho}"-"${mes}"-"${dia}`
#Separamos en campos el resto del nombre del fichero
nombre21=`echo $nombre1 | cut -d ',' -f1` #Lugar generico
nombre22=`echo $nombre1 | cut -d ',' -f2` #Lugar preciso
nombre23=`echo $nombre1 | cut -d '-' -f3` #Tema
nombre23=`echo $nombre23 | cut -d '(' -f2` #Tema
#Reescribimos el nombre del fichero con el nuevo formato
nombre2=`echo ${nombre21}","${nombre22}", "${fecha2}" ("${nombre23}`
echo $nombre1
echo $nombre2
echo "--------------------------------"
#Enviamos los ficheros a las carpetas de destino
cp "$nombre1" salida/"$nombre2"
mv "$nombre1" procesados
done
mv salida/* .
rm -fr salida
Si os preguntáis por qué copio los ficheros en lugar de directamente renombrarlos, tiene una explicación muy sencilla. Si por casualidad alguno de esos ficheros no tuviese el formato de fecha deseado, podríamos perder datos que tenemos en ese nombre y que no querríamos perder por nada del mundo. De esta forma siempre tenemos los ficheros originales con su nombre y demás.
Busca en San Guguel
Paranoyas sobre
Nube de tormentags
Archivetes
Risas
Candelario
Paranoya estadística
Linquetes
Suéltame tus idas de olla
Mola, yo también soy muy maniático con los nombres de los archivos (canciones, pelis, etc.) y no me doy decidido a un formato de nomenclatura para luego hacer una base de datos con todo.
Aun así, para las fotos prefiero usar algo del tipo F-Spot y tirar de metadatos y etiquetas.
Pero me apunto el script para usos futuros.
PD: Deberías añadirlo como opción a “Lista de software” que nunca está de más.
La verdad es que no creo que tuviese mucha utilidad en Lista de software. Ni siquiera para nombrar fotos, ya que si tienes muchas y tienes que ir una por una, lo más útil es hacerlo manualmente.
Muy interesante. Aprender a escriptear es mi gran cuenta pendiente, así que lo tomaré como ejemplo pacuando me ponga.
Ya te contaré más cuando organize mi colección de emepetreses.
Para que quedase todavía más claro, estaría bien que pusieses ejemplos reales (o inventados, pero con el nombre exacto que tenía antes y después de pasar por el programa) y no sólo el formato general que seguían los nombres y el que tendrán después.
Para las mentes vagas como yo, vamos, que así no hay que pensar para ver el resultado exacto
Joder, macho, si puse un ejemplo. No es tan difícil:
Restaurante Candilejas, Vigo, 9-II-2005 (Pepito de los palotes y su prima).jpg
Restaurante Candilejas, Vigo, 2005-02-09 (Pepito de los palotes y su prima).jpg
Aun a riesgo de parecer muy friki, he de decir que a mí lo que más me llamó la atención es que usaras bash. Ni yo sé por qué, pero te veía más con un shell tipo tcsh o así xD
La verdad es que antes lo usaba, pero bash me resulta más fácil, la verdad.