J'ai un fichier appelé diff.txt. Vous voulez vérifier s'il est vide. J'ai fait quelque chose comme ça mais je n'ai pas pu le faire fonctionner.
if [ -s diff.txt ]
then
touch empty.txt
rm full.txt
else
touch full.txt
rm emtpy.txt
fi
bash
if-statement
file-handling
is-empty
Michigan
la source
la source
diff
appel réel , il suffit de vérifier la valeur de retour:if diff foo.txt bar.txt; then echo 'No difference'
if [ ! -s diff.txt ]; then echo "IS EMPTY";else echo "HAS SOMETHING";fi
$ cat diff.txt | hexdump -C
Réponses:
Les fautes d'orthographe sont irritantes, n'est-ce pas? Vérifiez l'orthographe de
empty
, mais essayez également ceci:J'aime beaucoup les scripts shell, mais un inconvénient est que le shell ne peut pas vous aider lorsque vous avez mal orthographié, alors qu'un compilateur comme votre compilateur C ++ peut vous aider.
Notez d'ailleurs que j'ai échangé les rôles de
empty.txt
etfull.txt
, comme le suggère @Matthias.la source
empty=empty.txt; full=full.txt; diff=diff.txt; if [ -s ${diff?} ]; then r=${empty?} t=${full?}; else r=${full?} t=${empty?}; fi; rm ${r?}; touch ${t?}
set -u
la source
[[ -s file.name ]] || { [[ -f file.name ]] && echo 'empty' || echo 'does not exist'; }
[[-s file]] -> Vérifie si le fichier a une taille supérieure à 0
Si nécessaire, cela vérifie tous les fichiers * .txt dans le répertoire courant; et signale tout le fichier vide:
la source
$(ls *.txt
, et en fait, vous ne devriez pas. Certaines personnes ont défini des valeurs par défaut pourls
cela utilisent le format long (comme moi) et le shell se développera déjà tout*.txt
seul. Faites simplement à lafor file in *.txt
place.find
comme ceci:for file in $(find . -name '*.txt'); do if [[ ! -s $file ]]; then echo $file; fi; done
for file in $(ls *.txt); do
. Veuillez utiliser à lafor file in *.txt; do
place; veuillez lire cette page Bash Pitfalls ; et arrêtez de répandre des antipatterns comme ça.Bien que les autres réponses soient correctes, l'utilisation de l'
"-s"
option montrera également que le fichier est vide même si le fichier 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.la source
La réponse @geedoubleya est ma préférée.
Cependant, je préfère cela
la source
Pour vérifier si le fichier est vide ou ne contient que des espaces blancs , vous pouvez utiliser grep:
la source
-s
ne répond pas à la question. Il recherche un fichier qui existe et dont la taille est supérieure à 0 octet.Beaucoup de réponses sont correctes mais j'ai l'impression qu'elles pourraient être plus complètes / simplistes, etc. par exemple:
Exemple 1: instruction if de base
si $ read_file est vide ou non, arrêtez le spectacle avec exit. Plus d'une fois, j'ai mal interprété la réponse principale ici pour signifier le contraire.
Exemple 2: en tant que fonction
la source
la source
Je suis venu ici pour savoir comment supprimer des
__init__.py
fichiers vides car ils sont implicites dans Python 3.3+ et ont fini par utiliser:De plus (au moins dans zsh) l'utilisation de $ path comme variable casse également votre env $ PATH et donc cela brisera votre shell ouvert. Bref, je pensais partager!
la source
Le moyen le plus simple de vérifier que le fichier est vide ou non:
Vous pouvez également l'écrire sur une seule ligne:
la source