verificar vacio script saber pasar parametros operaciones manejo existencia existe esta como cadenas aritmeticas archivo bash if-statement file-handling is-empty

vacio - ¿Cómo comprobar si un archivo está vacío en Bash?



verificar existencia de archivo en shell (6)

Tengo un archivo llamado diff.txt. Quiere comprobar si está vacío. Hizo algo como esto pero no pudo hacerlo funcionar.

if [ -s diff.txt ] then touch empty.txt rm full.txt else touch full.txt rm emtpy.txt fi


Las faltas de ortografía son irritantes, ¿verdad? Verifica tu ortografía de empty , pero también prueba esto:

#!/bin/bash -e if [ -s diff.txt ] then rm -f empty.txt touch full.txt else rm -f full.txt touch empty.txt fi

Me gustan mucho las secuencias de comandos de shell, pero una desventaja es que el shell no puede ayudarte cuando escribes mal, mientras que un compilador como tu compilador de C ++ te puede ayudar.

Observe incidentalmente que he cambiado los roles de empty.txt y full.txt , como sugiere @Matthias.


Mientras que las otras respuestas son correctas, el uso de la opción "-s" también mostrará que el archivo está vacío, incluso si el archivo no existe.
Al agregar esta verificación adicional "-f" para ver si el archivo existe primero, nos aseguramos de que el resultado sea correcto.

if [ -f diff.txt ] then if [ -s diff.txt ] then rm -f empty.txt touch full.txt else rm -f full.txt touch empty.txt fi else echo "File diff.txt does not exist" fi


Muchas de las respuestas son correctas, pero creo que podrían ser más completas / simplistas, etc., por ejemplo:

# BASH4+ example on Linux : typeset read_file="/tmp/some-file.txt" if [ ! -s "${read_file}" ] || [ ! -f "${read_file}" ] ;then echo "Error: file (${read_file}) not found.. " exit 7 fi

si $ read_file está vacío o no allí, detenga el programa con exit. Más de una vez he leído mal la respuesta principal aquí para decir lo contrario.


[[-s archivo]] -> Comprueba si el archivo tiene un tamaño mayor que 0

if [[ -s diff.txt ]]; then echo "file has something"; else echo "file is empty"; fi

Si es necesario, esto verifica todos los archivos * .txt en el directorio actual; e informa todo el archivo vacío:

for file in $(ls *.txt); do if [[ ! -s $file ]]; then echo $file; fi; done


geedoubleya respuesta de geedoubleya es mi favorita.

Sin embargo, prefiero esto

if [[ -f diff.txt && -s diff.txt ]] then rm -f empty.txt touch full.txt elif [[ -f diff.txt && ! -s diff.txt ]] then rm -f full.txt touch empty.txt else echo "File diff.txt does not exist" fi


[ -s file.name ] || echo "file is empty"