A veces es interesante eliminar los directorios vacios de una ruta. Aunque hay formas de hacer esta tarea rápidamente con un par de comandos. He decidido hacer un script, que permite realizar esta tarea de eliminación o solo contar cuantos directorios vacios tenemos. O incluso preguntarnos antes de eliminar cada directorio, por si queremos dejar alguno sin eliminar (un directorio de plantillas por ejemplo).

El script es muy mejorable, y por ahora solo funciona en el directorio actual. Pero como ejercicio de refresco de bash scripting, me ha servido de algo.

A continuación, el código


#!/bin/bash
# Autor: Borja Rubio
# Descripcion: Script para búsqueda y eliminación de directorios vacios en el directorio actual.

function uso {
 echo "Busca los directorios vacios del directorio actual y se eliminan si así se indica."
 echo "Uso: $0 [OPCION]"
 echo -e "\t-c Muestra un conteo de directiors vacios/eliminados"
 echo -e "\t-r Elimina los directorios vacios"
 echo -e "\t-i Modo interactivo (Debe usarse junto a -r"
 echo -e "\t-h incluye los directorios ocultos"
 echo "Ejemplos:"
 echo "$0 -c -- Solo muestra el conteo de directorios vacios"
 echo "$0 -chr -- Elimina los directorios vacios, incluyendo los ocultos y muestra un resumen"
 echo "$0 -cri -- Pregunta antes de eliminar un directorio vacio"
}
if [ $# -eq 0 ] ; then
uso
exit
fi
while getopts 'hcir' OPCION
do
 case $OPCION in
 h) OCULTOS=-A
 ;;
 c) CONTEO=true
 ;;
 r) BORRAR=true
 ;;
 i) INTERACTIVE=true
 esac
done

directories=`ls $OCULTOS`
contador=0;
eliminados=0;
for j in $directories
do
 if [ -d $j ] ; then
 lines=`ls $OCULTOS $j | wc -w`
 if [ $lines -eq 0 ] ; then
 if [ $CONTEO ] ; then
 let contador=$contador+1
 fi
 if [ $BORRAR ] && [ $INTERACTIVE ] ; then
 echo "Eliminar $j ? (y/N) "
 read value
 if [ $value == "y" ] ; then
 `rmdir $j`
 let eliminados=$eliminados+1
 fi
 elif [ $BORRAR ] ; then
 `rmdir $j`
 let eliminados=$eliminados+1
 fi
 fi
 fi
done
if [ $CONTEO ] ; then
echo "$contador directorios vacios ; $eliminados directorios eliminados"
fi

« »