Comment vérifier si un fichier est vide dans Bash?
J'ai un fichier appelé diff.txt. Vous voulez vérifier si c'est vide. J'ai fait quelque chose comme ça mais je ne pouvais pas le faire fonctionner.
if [ -s diff.txt ]
then
touch empty.txt
rm full.txt
else
touch full.txt
rm emtpy.txt
fi
Les fautes d'orthographe sont irritantes, n'est-ce pas? Vérifiez l'orthographe de empty
, mais essayez également 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 un inconvénient est que le shell ne peut pas vous aider en cas d'erreur, alors qu'un compilateur comme votre compilateur C++ peut vous aider.
Remarquez par ailleurs que j'ai échangé les rôles de empty.txt
et full.txt
, comme le suggère @Matthias.
[ -s file.name ] || echo "file is empty"
[[-s fichier]] -> Vérifie si la taille du fichier est supérieure à 0
if [[ -s diff.txt ]]; then echo "file has something"; else echo "file is empty"; fi
Si nécessaire, cela vérifie tous les fichiers * .txt du répertoire en cours; et signale tout le fichier vide:
for file in *.txt; do if [[ ! -s $file ]]; then echo $file; fi; done
Bien que les autres réponses soient correctes, l'utilisation de l'option "-s"
indiquera également que le fichier est vide, même s'il n'existe pas.
En ajoutant cette vérification supplémentaire "-f"
pour voir si le fichier existe en premier, nous nous assurons que le résultat est correct.
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
@geedoubleya answer est mon préféré.
Cependant, je préfère cela
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
La plupart des réponses sont correctes mais j’ai l’impression qu’elles pourraient être plus complètes /simpliste etc. par exemple:
# 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 vide ou non, arrête le show avec exit. Plus d’une fois, j’ai mal interprété la réponse figurant en haut pour indiquer le contraire.
[[ -f filename && ! -s filename ]] && echo "filename exists and is empty"
Pour vérifier si le fichier est vide ou ne contient que des espaces, vous pouvez utiliser grep:
if [[ -z $(grep '[^[:space:]]' $filename) ]] ; then
echo "Empty file"
...
fi
Je suis venu ici pour savoir comment supprimer les fichiers __init__.py
vides car ils sont implicites dans Python 3.3+ et que j'ai fini par utiliser:
find -depth '(' -type f -name __init__.py ')' -print0 |
while IFS= read -d '' -r file; do if [[ ! -s $file ]]; then rm $file; fi; done
De plus (au moins en zsh), utiliser $ path en tant que variable interrompt également votre envoi $ PATH et ainsi, votre shell ouvert sera brisé. Quoi qu'il en soit, je pensais partager!