3586 votes

Comment puis-je savoir si un fichier n'existe pas en bash?

J'ai utilisé le script suivant pour voir si un fichier existe:

#!/bin/bash
FILE=$1

if [ -f $FILE ];
then
   echo "File $FILE exists."
else
   echo "File $FILE does not exist."
fi

Quelle est la bonne syntaxe à utiliser si je ne veux vérifier si le fichier ne doit pas exister?

#!/bin/bash
FILE=$1

if [ $FILE does not exist ];
then
   echo "File $FILE does not exist."
fi

4930voto

John Feminella Points 116878

Le test de commandement ([ ici) a un "pas" opérateur logique qui est le point d'exclamation (semblable à beaucoup d'autres langues). Essayez ceci:

if [ ! -f /tmp/foo.txt ]; then
    echo "File not found!"
fi

768voto

GroundZero Points 678

Bash Fichier De Test
-b nom de fichier - fichier spécial Bloc
-c nom de fichier - fichier de caractères Spéciaux
-d répertoire - Vérifier l'existence d'un répertoire
-e nom de fichier - Vérification de l'existence des fichiers
-f filename - Vérifier régulièrement existence de fichier n'est pas un répertoire
-G nom de fichier - Vérifier si le fichier existe et est détenue par des ID de groupe.
-g nom de fichier vrai si le fichier existe et est set-group-id.
-k nom de fichier - Sticky bit
-L nom de fichier - lien Symbolique
-O nom de fichier Vrai si le fichier existe et est détenu par l'uid effectif.
-r fichier - Vérifier si le fichier est lisible
-S nom de fichier - Vérifier si le fichier est prise
-s nom de fichier - Vérifier si le fichier est différent de zéro taille
-u nom de fichier - Vérifier si le fichier set-user-id bit est défini
-w fichier - Vérifier si le fichier est accessible en écriture
-x nom de fichier - Vérifier si le fichier est exécutable

Comment utiliser

#!/bin/bash
file="./file"
if [ -e $file ]; then
    echo "File exists"
else 
    echo "File does not exist"
fi 

Un si-condition peut également être réduits à néant par l'aide !

#!/bin/bash
file="./file"
if [ ! -e $file ]; then
    echo "File does not exist"
else 
    echo "File exists"
fi 

144voto

guns Points 3881
if [[ ! -a $FILE ]]; then
    echo "$FILE does not exist!"
fi

Aussi, il est possible que le fichier est cassé un lien symbolique, ou un non-fichier régulier, comme par exemple une douille, d'un appareil ou fifo. Si vous voulez attraper que vous devriez:

if [[ ! -a $FILE ]]; then
    if [[ -L $FILE ]]; then
        echo "$FILE is a broken symlink!"
    else
        echo "$FILE does not exist!"
    fi
fi

108voto

Elazar Leibovich Points 9396

Il est important de mentionner que si vous avez besoin d'exécuter une seule commande, vous pouvez abréger

if [ ! -f $file ]; then echo $file;fi

pour

test -f $file || echo $file

ou

[ -f "$file" ] || echo $file

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X