Comment vérifier si un fichier est vide en Bash ?

J'ai un fichier appelé diff.txt. Je veux vérifier s'il est vide. J'ai fait quelque chose comme ça mais je n'ai pas réussi à le faire fonctionner.

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

Les fautes d'orthographe sont irritantes, n'est-ce pas ? Vérifiez l'orthographe de empty, mais essayez aussi ceci :

#!/bin/bash -e

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

J'aime beaucoup les scripts shell, mais l'un de leurs inconvénients est que le shell ne peut pas vous aider lorsque vous faites des fautes d'orthographe, alors qu'un compilateur comme votre compilateur C++ peut vous aider.

Notez incidemment que j'ai interverti les rôles de empty.txt et full.txt, comme le suggère @Matthias.

Commentaires (6)
[ -s file.name ] || echo "file is empty"
Commentaires (2)

[[ -s fichier ]] --> Vérifie si le fichier a une taille supérieure à 0.

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

Si nécessaire, ceci vérifie tous les fichiers *.txt dans le répertoire courant ; et rapporte tous les fichiers vides :

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