#Ejercicio 3. Crear un script que muestre qué directorios por debajo del actual contienen imágenes y dé la opción de mostrarlas, ya sea por directorio o todas al mismo tiempo.
#menu
#!/bin/bash
#Variables Globales
ListaDeImagenes=listaDeImagenes.txt
ListaDeDirectorios=listaDeDirectorios.txt
#Funcion de crear listas con directorios y imágenes
CrearListas(){
#Borramos ficheros de una posible ejecución anterior del Script
rm lista*.txt 2>/dev/null
echo ""
echo "Espere un momento por favor"
echo ""
for tipo in jpeg gif jpg; do
#Para visualizar qué extensión está buscando en tiempo de ejecución
#echo el tipo es $tipo
#Crea una lista temporal con todas las imágenes encontradas
find -name *.$tipo >> listatmp1.txt
if ! [ -s listatmp1.txt ]; then
echo "El directorio no contiene Imágenes"
rm listatmp1.txt
sleep 3
exit 1
fi
#La ordena para después eliminar las imágenes repetidas y crea un archivo con su resultado
sort listatmp1.txt|uniq >> $ListaDeImagenes
rm listatmp1.txt
#Mientras que haya algo para leer, haz
while read linea; do
#Guarda lo leído filtrado por el patrón
archivo=`echo "$linea"|grep $tipo`
#Corta la cadena aislando la ruta de la imágen encontrada
archivo=${archivo%/*.$tipo}
if ! [ "$archivo" = "" ]; then
echo $archivo >> listatmp2.txt
fi
done < $ListaDeImagenes
done
#Elimino rutas repetidas
sort listatmp2.txt|uniq > $ListaDeDirectorios
rm listatmp?.txt
}
DevolverDirectorio(){
i=0;
Directorio=""
while read D; do
let i++;
#Si el número elegido está en el fichero, es el directorio que necesitamos
if [ $1 -eq $i ]; then
Directorio=$(echo $D)
break;
fi
done < $ListaDeDirectorios
}
MostrarImagenesDeDirectorio(){
j=0
echo " "
echo -n "El directorio "
echo "$1 tiene las siguientes imágenes:" | cut -c3-
#Leer línea por línea las rutas de imágenes
for imagen in $(cat $ListaDeImagenes); do
#Contamos número en bytes strlen()
tam=${#1}
#Aumentamos 2 veces, para que nos corte <$directorio/>
let tam+=2
#Fichero tiene el nombre del fichero
#Ruta tiene nombre de subcarpetas
fichero=$(echo $imagen |grep $1 |cut -c$tam-)
ruta=$(echo $imagen |grep $1 |cut -c$tam- |grep /)
#Si el fichero existe y la ruta del fichero no contiene subcarpetas
if ! [ "$fichero" = "" ] && ! [ "$ruta" = "$fichero" ]; then
echo $imagen|cut -c3-
if [ $j -eq 0 ]; then
eog $imagen
let j++
fi
fi
done
echo "------------------------------------"
}
#rm lista*.txt 2>/dev/null
CrearListas
while [ "$OPCION" != 5 ]; do
echo "MENÚ"
echo "[1] Ver directorio de trabajo"
echo "[2] Listar todos los directorios que contienen imágenes"
echo "[3] Listar todas las imágenes con sus ruta respectiva"
echo "[4] Abrir imágenes por directorio"
echo "[5] Salir"
read -p "Ingrese una opción: " OPCION
case $OPCION in
1) echo " "
echo "El directorio actual es:"
echo -n " "
pwd
echo " ";;
2) echo " "
echo "Los directorios que contienen archivos de imágen son:"
#Si tenemos listas de directorios creadas, no las creamos de nuevo
if ! [ -e $ListaDeDirectorios ]; then
CrearListas
fi
for i in $(cat $ListaDeDirectorios | cut -c3-);do
echo " $i"
done
echo " ";;
3) #Si el fichero con una lista de directorios no esta creado, lo creamos
if ! [ -e $ListaDeDirectorios ]; then
CrearListas
fi
echo " "
echo "Las imágenes y sus respectivas rutas existentes en el directorio actual son: "
for i in $( sort $ListaDeImagenes | cut -c3-); do
echo " $i"
done
echo " ";;
4) if ! [ -e $ListaDeDirectorios ]; then
CrearListas
fi
numeroDirect=1
while [ $numeroDirect -gt 0 ]; do
echo ""
echo "Eliga qué directorio quiere abrir:"
#Cat -b para numerar las líneas que no están vacías
cat $ListaDeDirectorios | cut -c3- | cat -b
echo " 0 Salir"
read -p "Introduce el número de directorio: " numeroDirect
#Si se ha introducido un numero
if [ $numeroDirect -gt -1 2>/dev/null ]; then
if [ $numeroDirect -gt 0 ]; then
DevolverDirectorio $numeroDirect
if [ "$Directorio" = "" ]; then
echo ""
echo "Error: El directorio elegido no esta en la lista"
else
MostrarImagenesDeDirectorio "$Directorio"
fi
fi
else
numeroDirect=1
fi
done
echo " ";;
esac
done
#Borramos ficheros
rm lista*.txt 2>/dev/null