Eliminar directorios vacíos con un script bash

Eliminar directorios vacíos con un script bash, en linux.

A base de instalar y desinstalar aplicaciones, es común que nuestro sistema se llene de carpetas (directorios) vacías. Es cierto que ocupan poco espacio de nuestro disco, pero también es cierto que son muy molestas en ciertos momentos, por ejemplo cuando buscamos un archivo en particular, o listamos los directorios de nuestro sistema.

En este artículo (de los que a mí me gustan), te presento un script bash con la capacidad de identificar los directorios vacíos y borrarlos (eliminar directorios vacios), si tú se lo pides. Es bastante seguro, dado que aparte que tienes que indicar donde buscar, también te solicita permiso. Deberás responder YES o NO.

 

Eliminar directorios vacíos con un script bash

Creamos nuestro script para eliminar directorios.

nano borrard.sh

Copia y pega el siguiente código.

#!/bin/bash
#Check if user input parameter, if not ask to enter directory
if [ x"$1" = "x" ]; then
#Ask user to input directory where to start search for empty directories.
echo -n "Introduce el directorio donde quieres eliminar las carpetas vacías: "
 
#we read input
while read dir
 
do
 
#we check if input empty
test -z "$dir" && {
 
#if input empty – we ask once more to input directory
echo -n "Introduce el directorio: "
 
continue
 
}
 
#if entered no empty data – continue to do other things
break
 
done
 
#if user entered parameter do next:
else
#dirname will be passed parameter
dir=$1
fi
#this check if directory exist, exit if not
if [ ! -d $dir ]; then
echo "Este directorio no existe"
exit 1
fi
 
#We will store list of all directories in temporary file
DirList=/tmp/ditlist.tmp
 
# we search for all directories
find $dir -type d > $DirList
 
#writing all directories to vatiable
dirs=`cat $DirList`
 
#start checking every directory
for dir in $dirs
 
do
 
#we are checking if directory is empty
[ `ls $dir | wc -l` -lt 1 ] || continue
#this ask user if really delete directory
echo -n "Quieres eliminar el directorio vacio $dir: [No/yes] "
#reading users answer:
read answer
#Checing answer, if yes – we will delete folder, nothing in other case:
if [ "$answer" = "yes" ]; then
rmdir "$dir"
fi
done

Guarda el script y cierra el editor.

 

Para no tener problemas de permisos, es recomendable que siempre ejecutes este script bash con privilegios de administrador. Ahora vemos un ejemplo real en un servidor demo, no reproduzcas la ruta o te quedarás sin sistema operativo.

sudo bash borrard.sh

Nos pregunta el directorio del sistema (o cualquier otro), donde queremos buscar y borrar los directorios que están vacíos.

[root@62 ~]# sudo bash borrar.sh
Introduce el directorio donde quieres eliminar las carpetas vacías:

Como es un demo y somos más chulos que un ocho, borramos los directorios vacíos de «/etc» (no lo hagas, solo es una demo). Ten cuidado al eliminar directorios vacíos.

Continuamos con nuestro ejemplo.

[root@62 ~]# bash borrar.sh
Introduce el directorio donde quieres eliminar las carpetas vacías: /etc

Observa como borramos todos los directorios vacíos…

[root@62 ~]# sudo bash borrar.sh
Introduce el directorio donde quieres eliminar las carpetas vacías: /etc
Quieres eliminar el directorio vacio /etc/smartmontools/smartd_warning.d: [No/yes] yes
Quieres eliminar el directorio vacio /etc/tuned/recommend.d: [No/yes] yes
Quieres eliminar el directorio vacio /etc/modules-load.d: [No/yes] yes
Quieres eliminar el directorio vacio /etc/ppp/peers: [No/yes] y
Quieres eliminar el directorio vacio /etc/xdg/autostart: [No/yes] yes
Quieres eliminar el directorio vacio /etc/selinux/targeted/logins: [No/yes] yes
Quieres eliminar el directorio vacio /etc/selinux/targeted/active/modules/disabled: [No/yes] yes
Quieres eliminar el directorio vacio /etc/selinux/targeted/modules/active/modules: [No/yes] yes
Quieres eliminar el directorio vacio /etc/selinux/tmp: [No/yes] yes
Quieres eliminar el directorio vacio /etc/selinux/final: [No/yes] yes
Quieres eliminar el directorio vacio /etc/multipath: [No/yes] yes
Quieres eliminar el directorio vacio /etc/gnupg: [No/yes] yes
Quieres eliminar el directorio vacio /etc/gss/mech.d: [No/yes] yes
Quieres eliminar el directorio vacio /etc/skel: [No/yes] yes
rmdir: fallo al borrar «/etc/skel»: El directorio no está vacío
Quieres eliminar el directorio vacio /etc/tmpfiles.d: [No/yes] yes
Quieres eliminar el directorio vacio /etc/systemd/user: [No/yes] yes
Quieres eliminar el directorio vacio /etc/udev/rules.d: [No/yes] yes
Quieres eliminar el directorio vacio /etc/krb5.conf.d: [No/yes] yes
Quieres eliminar el directorio vacio /etc/dracut.conf.d: [No/yes] yes
Quieres eliminar el directorio vacio /etc/lvm/archive: [No/yes] yes
Quieres eliminar el directorio vacio /etc/lvm/cache: [No/yes] yes
Quieres eliminar el directorio vacio /etc/lvm/backup: [No/yes] yes
Quieres eliminar el directorio vacio /etc/xinetd.d: [No/yes] yes
Quieres eliminar el directorio vacio /etc/glvnd/egl_vendor.d: [No/yes] yes
Quieres eliminar el directorio vacio /etc/sysconfig/console: [No/yes] yes
Quieres eliminar el directorio vacio /etc/sysconfig/modules: [No/yes] yes
Quieres eliminar el directorio vacio /etc/chkconfig.d: [No/yes] yes
#
# Eliminar directorios vacios

Al recorrer todo el árbol de directorios indicado, el sistema volverá al usuario. Ten mucho cuidado al eliminar directorios, algunos pueden ser necesarios para un correcto funcionamiento del sistema.

 

Canales de Telegram: Canal SoloLinux – Canal SoloWordpress

Espero que este artículo te sea de utilidad, puedes ayudarnos a mantener el servidor con una donación (paypal), o también colaborar con el simple gesto de compartir nuestros artículos en tu sitio web, blog, foro o redes sociales. Eliminar directorios vacíos con un script bash.

 

3 Comentarios

  1. Galore
    27/05/2020
    • Sergio G.B.
      27/05/2020
  2. Juan Ángel
    28/05/2020

Agregar comentario