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"