Bueno gente... ayer estaba que quería meter toda la música al XMMS, pero resulta, que mis mp3 los tengo bieeen ordenaditos por todo el disco duro, repartidos en cuatro particiones.
Ciertamente, el XMMS tiene una opción para cargar directorios completos, pero por alguna razon, si hay demasiados directorios por revisar, tarda demasiado.
Así que bueno, me busque una forma de hacer los playlist con un un comando de shell, y aquí esta el resultado.
Nota: El formato de salida es m3u, usé ese formato porque es el mas simple, solo va en cada linea la ruta completa al mp3.
Primero, la función más basica que nos permite hacer algo como eso es la siguiente:
$ find /directorio | grep mp3$ > lista.m3u
Para crear la lista, solo debemos de cambiar "
/directorio" por la ruta completa de donde queremos buscar los mp3, y "
lista.m3u" por el nombre de archivo de lista que querramos.
Sin embargo, como nunca estoy conforme decidí hacer un pequeño script que toma dos argumentos de entrada, el directorio y el nombre de la lista, y genera automaticamente el comando adecuado para buscar los mp3. Además revisa si existe una lista previa y pregunta si deseamos anexar los mp3 al final del archivo.
Esta bastante útil para hacer listas, espero que les guste, aquí les dejo el codigo completo:
La sintaxis simple:
$ ./newPlaylist.sh /ruta/a/mis/mp3 milista
#!/bin/bash
# Copyright 2005-2006 Mario Gomez
# Software propiedad de Mario Enrique Gomez Argueta
# Se permite su copia/modificacion/distribucion bajo los
# terminos de la licencia GNU/GPL V2.0 que puede ser
# obtenida de www.fsf.org
# Variable que almacena el directorio
DIRECTORIO=$1
# Variable que almacena el nombre de la lista
ARCHIVOLISTA=$2
# Archivo que guarda la informacion de errores
ERRORLOG=".playListError.log"
# Funcion que crea/anexa a una lista existente
function appendPlaylist {
echo "Anexando $1 a $2.m3u"
echo "ErrorLog para $2.m3u" >> $HOME/$ERRORLOG
find $1 2>> $HOME/.playListError.log | egrep '\.mp3$|\.ogg$' >> "$2.m3u"
}
# Funcion que crea una nueva lista
function createPlaylist {
echo "Creando $2.m3u con $1"
echo "ErrorLog para $2.m3u" >> $HOME/$ERRORLOG
find $1 2>> $HOME/$ERRORLOG | egrep '\.mp3$|\.ogg$' > "$2.m3u" 2> /dev/null
}
# Numero de argumentos del script
NARGS=2
# Error de argumentos invalidos
E_BADARGS=65
# Error de directorio invalido
E_NODIR=66
# Si el numero de argumentos es 1
if [ $# -eq "1" ]
then
# Si el argumento es "-e"
if [ $1 = "-e" ]
then
# Muestra el archivo de errores
less $HOME/$ERRORLOG
exit 0
else
echo "Uso: ./newPlaylist.sh -e"
echo " Muestra el log de errores"
fi
fi
if [ $# -ne "$NARGS" ] # Si no coincide el numero de argumentos
then
# Se muestra la ayuda
echo "Uso: ./newPlaylist.sh directorio nombreLista"
echo "Nota: Debe colocar la ruta completa al directorio"
echo " No es necesario agregar la extension m3u"
exit $E_BADARGS # Termina con el error
fi
if [ ! -d "$DIRECTORIO" ] # Si no existe el directorio
then
# Muestra el error
echo "Error: Debe de ingresar un nombre de directorio valido"
exit $E_NODIR # Termina con el error
fi
# Si ya existe un archivo de lista
if [ -e "$ARCHIVOLISTA.m3u" ]
then
# Se muestra el mensaje de informacion
echo "Advertencia: Ya existe un archivo llamado $ARCHIVOLISTA.m3u."
# Esperamos por una entrada valida
while [ "1" ]
do
# Lee la entrada del teclado y la almacena en $opcion
read -p "Deseea sobreescribir o anexar? (c para cancelar) (s/a/c) " option
# Se evalua la entrada
case $option in
S | s) createPlaylist $DIRECTORIO $ARCHIVOLISTA # Con S se sobreescribe la lista
exit 0
;;
A | a) appendPlaylist $DIRECTORIO $ARCHIVOLISTA # Con a se anexa al final
exit 0
;;
C | c ) exit 0 # Con c se sale del script
;;
esac
done
else # Si no existe el archivo de lista
createPlaylist $DIRECTORIO $ARCHIVOLISTA # Se crea una nueva lista
exit 0 # Se termina correctamente
fi
Modificado:
Se me olvidaba, para que puedan usarlo, tienen que hacer algo como los siguiente:
$ unzip newPlaylist.zip
$ chmod 755 newPlaylist.sh
Para ver el log de errores:
$ ./newPlaylist.sh -e
Si les gustó el script, pueden copiarlo a /usr/bin (como root)
# cp newPlaylist.sh /usr/bin/newPlaylist
Y así lo van a poder accesar como:
$ newPlaylist /directorio nombreLista