Consejos de Shell: Detección de directorios vacíos

Consejos de Shell: Detección de directorios vacíos

08.05.2024
Autor: HostZealot Team
2 min.
34

Aspectos clave

La administración del sistema Linux no es una tarea sencilla y para hacerlo con eficacia, es mejor conocer los comandos y comprender los aspectos principales de los procesos. Por ejemplo, lo importante es saber si el directorio está vacío antes de abordar cualquier operación crucial.

Basándonos en nuestra experiencia práctica en este campo, podemos darle un par de instrucciones que le ayudarán a determinar si el directorio está vacío. Aquí obtendrá recomendaciones prácticas que se pueden utilizar en shell script y shell. 

1. Uso de la orden de búsqueda

Por regla general, find se utiliza para buscar de acuerdo a un patrón específico cuando se habla de directorios y archivos. En esta parte, explicaremos cómo este comando se puede utilizar de otra manera, en particular para comprobar si un directorio está vacío.

1.1. La opción -empty

Según las características por defecto de este comando, -empty está comprobando los directorios y ficheros. Para cambiar algo y seleccionar sólo directorios utilice lo siguiente:

  $ find . -type d -empty

En esta línea de comandos, -empty se utiliza para especificar que la búsqueda es sólo para el archivo o directorio vacío, y mediante el uso de -type d estamos mencionando que la búsqueda es sólo para los directorios. Esta línea llevará a las rutas del directorio encontrado que deben estar vacías.

1.2. Comando con sentencia if

Aquí le mostraremos 2 variantes de cómo usar sentencias if junto con el comando test. El primer enfoque cuenta los archivos en un directorio determinado, y es el siguiente:

if [ "$(find projects -mindepth 1 -maxdepth 1 | wc -l)" -eq 0 ]; then
echo "Empty Directory"
else
echo "Directory isn’t empty"
fi

En este script -eq 0 funciona comparando si el número de elementos es cero, wc -l cuenta los elementos en el directorio. -mindepth 1 - esta parte garantiza que find no tiene un directorio en la búsqueda y -maxdepth 1 - esto significa que los directorios/archivos se buscarán en un directorio determinado.

Otra opción se parece a esto:

if [ -z "$(find projects -mindepth 1 -maxdepth 1)" ]; then
echo "Empty Directory"
else
echo "Directory isn’t empty"
fi

En este script, -z indica verdadero en el caso de la salida vacía. Eso significa que si el proyecto está realmente vacío entonces se le notificará con esta fase " Directorio vacío".

2. Aplicación del comando ls

Probablemente la forma menos complicada de comprobar el directorio es el uso del comando ls. No necesitará crear ningún script difícil, simplemente use la siguiente línea:

$ ls projects

La salida de esta línea mostrará sólo los directorios que incluyan algún tipo de información, por lo que los demás que no se muestren estarán vacíos.

2.1. Aplicación del comando de prueba con la sentencia if

Para revisar el contenido del directorio, necesitará utilizar ls junto con otra opción, de tal forma:

$ if [ -z "$(ls -A projects)" ]; then echo "Directorio vacío "; else echo "El directorio no está vacío"; fi

En esta línea, A projects unido a ls se utiliza para mostrar el contenido en todos los directorios además del actual y el directorio padre.  

Además, es posible contar el número de elementos con:

$ if [ "$(ls -A projects | wc -l)" -eq 0 ]; then echo "Empty Directory"; else echo "Directory isn’t empty"; fi

3. Opción Shopt

Shopt opción es un comando que permite desestablecer y establecer las opciones de shell. Con el uso del argumento -s para establecer nullglob. Dicha opción es responsable de cómo se comporta el shell con patrones que no tienen archivos coincidentes. Por ejemplo, un script con nullglob que no coincide con el archivo se expande a una lista vacía mientras que sin ella, el patrón es sólo una cadena literal.

# Path of directory
directory_path="/home/samuel/Desktop/projects"
 
# Enable the nullglob
shopt -s nullglob
 
# Whether is it an empty directory?
files=( "$directory_path"/* )
if [ ${#files[@]} -eq 0 ]; then
echo "Empty Directory"
else
echo "Directory isn’t empty"
fi

Utilizando este script de Bash, tendrá una salida "Directorio vacío" en caso de que esté vacío o incluya sólo tipos de archivos ocultos.

4. Reflexiones finales

Decidimos compartir nuestra experiencia práctica y sumergirnos en varios enfoques que se pueden utilizar para determinar si el directorio está vacío o no. Los principales enfoques son el uso de los comandos ls y find.

Después de revisar todas las variantes disponibles, usted puede seleccionar la que mejor funcione para su caso específico basado en los requerimientos y el rendimiento. El simple hecho de entender las técnicas mencionadas para scripts y comandos de shell le ayudará poderosamente en la gestión de directorios en sistemas Linux. Esperamos que nuestras instrucciones le sean útiles.

Artículos Relacionados