lunes, 16 de mayo de 2011

SCRIPT EJERCICIO 3 MARTA ALFAGEME

#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

No hay comentarios:

Publicar un comentario