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!