Comprobar si un archivo está vacío en Bash

Faaiq Bilal 15 febrero 2024
  1. Use el comando test con el indicador de opción -s para verificar si un archivo está vacío en Bash
  2. Use el comando ls para verificar si un archivo está vacío en Bash
Comprobar si un archivo está vacío en Bash

A menudo es necesario verificar si un archivo está vacío o no, y afortunadamente existen algunos métodos simples para verificarlo usando Bash en la terminal o incluso con un script de Bash.

Use el comando test con el indicador de opción -s para verificar si un archivo está vacío en Bash

El comando test es uno de los comandos integrados de shell más útiles y tiene muchas opciones para archivos y directorios. La opción -s del comando test comprueba si un archivo tiene un tamaño superior a 0 o no.

Si el tamaño del archivo excede cero, el comando devolverá verdadero. De lo contrario, devolverá falso.

El uso de test -s se demuestra a continuación. Explicaremos el comando test mediante un ejemplo.

En este ejemplo, tenemos un archivo llamado newFile.txt. Crearemos un script Bash titulado empty_test.sh, de la siguiente manera:

#!/bin/bash
test -s newFile.txt && echo "file has something" || echo "file is empty"

Si el archivo newFile.txt está vacío, el shell tendrá el siguiente resultado:

Salida vacía

Por otro lado, si newFile.txt tiene algún contenido, como por ejemplo:

Hello!

Entonces la salida será la siguiente:

Salida no vacía

El comando anterior es un método sencillo para verificar si el archivo seleccionado está vacío o no. Imprimirá el archivo tiene algo si test -s newFile.txt se evalúa como verdadero.

De lo contrario, imprimirá el archivo está vacío. Este comando se puede usar en un script Bash o ejecutarse directamente en la terminal.

Es importante tener en cuenta que si este comando se usa en un directorio o nivel diferente al del archivo que se está verificando, será necesario escribir la ruta completa del archivo.

Hay una forma alternativa de escribir el comando anterior. En Bash, [ también es un shell integrado y es equivalente al comando test:

#!/bin/bash
[ -s newFile.txt ] && echo "file has something" || echo "file is empty"

Este comando es equivalente al comando que usamos anteriormente.

También podemos usar el comando test -s para encontrar todos los archivos vacíos en un directorio dado:

#!/bin/bash
for file in *.txt;
do if [ ! -s $file ];
then echo $file;
fi;
done

Los comandos anteriores imprimirán los nombres de todos los archivos .txt vacíos en el directorio. Se puede personalizar fácilmente para verificar diferentes tipos de archivos simplemente reemplazando .txt con otra extensión.

Use el comando ls para verificar si un archivo está vacío en Bash

El comando ls enumera todos los archivos y subdirectorios en el directorio actual. El comando ls también se puede usar con el indicador de opción -s para mostrar el tamaño de los archivos junto a sus nombres.

Por ejemplo, si ejecutamos el comando ls -s en el directorio test que hemos creado con dos subdirectorios y un archivo .docx, obtenemos este resultado:

salida macOS ls

Es importante tener en cuenta que en macOS, este comando mostrará el tamaño de todos los subdirectorios como 0. Esto es independiente de si los subdirectorios tienen o no algún otro contenido.

También se debe tener en cuenta que el shell predeterminado en uso es zsh (no el bash). Sin embargo, esta no es una diferencia causada por el shell sino por el propio Sistema Operativo.

Para ilustrar este resultado en un entorno Linux, específicamente utilizando bash, creamos una carpeta de prueba con dos directorios vacíos titulados Prueba 1 y Prueba 2. También contiene dos archivos de texto, donde test.txt tiene una pequeña cadena y test2.txt es un archivo de texto en blanco.

Salida de ls de Linux

Independientemente del tamaño de su contenido, los subdirectorios se muestran como 4 kilobytes. Esto no es representativo del contenido real de la carpeta; este es el espacio de entrada ocupado.

Un mejor método es usar el comando ls con el indicador de opción -l, ya que esto mostrará más información en forma de tabla:

ls -l

Ejecutaremos este comando en el mismo directorio Test que antes. La salida es la siguiente:

Linux ls l Salida

Como se vio anteriormente, el comando ls -l brinda más información y muestra el tamaño correcto de los subdirectorios.

Para ver el tamaño en KB, MB y GB, utilice la opción -lh. La inclusión de la bandera h hace que los datos sean más legibles por humanos.

La salida será algo como lo siguiente:

Salida Linux ls lh

Artículo relacionado - Bash File