Bash – Tester si un fichier ou un dossier existe

Bash - Tester si un fichier ou un dossier existe

Vous êtes en train d’écrire un script Bash et vous avez besoin de tester si un fichier ou un dossier existe bien sur votre machine ? Alors cet article orienté Linux devrait vous plaire, car c’est exactement ce que nous allons voir !

Sur le même thème, vous pouvez lire cet article, mais aussi parcourir le site ! 😉

1. Tester si un fichier existe en Bash

Pour commencer, nous allons nous intéresser aux fichiers puisque l’on va chercher à vérifier si un fichier existe ou pas. Pour cela, une condition « if » va nous permettre d’effectuer ce test assez facilement.

Dans cet exemple, on teste l’existence du fichier « /home/tutobox/mon-fichier.txt« , en stockant ce chemin dans la variable FICHIER. Ensuite, avec une condition « if » et la condition « -f » on peut effectuer une action uniquement si le fichier existe. Ici, on écrit dans la console « Le fichier existe (<nom du fichier>) ».

Voici le résultat final :

#!/bin/bash
FICHIER=/home/tutobox/mon-fichier.txt

if [ -f "$FICHIER" ]; then
    echo "Le fichier existe ($FICHIER)"
fi

Un résultat en image (basé sur d’autres chemins) :

Tester si un fichier existe en Bash

Plutôt que d’afficher une simple phrase, on pourrait tout à fait envoyer une notification par e-mail lorsque le fichier est trouvé (par exemple pour vérifier la présence d’un fichier de sauvegarde).

#!/bin/bash
FICHIER=/home/tutobox/mon-fichier.txt

if [ -f "$FICHIER" ]; then
    echo "Sauvegarde réussie !" | mail -s "OK - Sauvegarde réussie" destinataire@tutobox.fr -aFrom:expediteur@domaine.fr
fi

Ceci implique de configurer un agent sur la machine locale de manière à pouvoir envoyer des e-mails. On peut citer MSMTP et Postfix comme exemple.

Pour aller plus loin, on peut ajouter une condition « else » pour agir dans le cas où le fichier n’existe pas. Par exemple, si le fichier n’existe pas, on peut le créer avec la commande « touch ». Là encore, on utilise la variable FICHIER. Ce qui donne :

#!/bin/bash
FICHIER=/home/tutobox/mon-fichier.txt

if [ -f "$FICHIER" ]; then
    echo "Le fichier existe ($FICHIER)"
else
    echo "Le fichier n'existe pas ($FICHIER). Il va être créé"
    touch $FICHIER
fi

À titre d’information, sachez que l’on pourrait utiliser également la commande « test » explicitement. La syntaxe serait alors :

#!/bin/bash
FICHIER=/home/tutobox/mon-fichier.txt

if test -f "$FICHIER"; then
    echo "Le fichier existe ($FICHIER)"
fi

Bien sûr, ce bout de code doit être écrit dans un fichier « .sh » avec l’éditeur de texte nano (ou un autre comme vi), par exemple « fichier.sh », sur lequel il faudra attribuer des droits d’exécution avant de pouvoir l’exécuter :

chmod +x fichier.sh

Puis, pour l’exécuter :

./fichier.sh

2. Tester si un dossier existe en Bash

Pour tester si un dossier existe ou non, on peut reprendre l’exemple précédent sauf que l’on va ajuster la condition ! Au lieu d’utiliser la condition « -f » défiée aux fichiers, on va utiliser la condition « -d » qui s’adresse aux dossiers. Pour le reste, le principe reste le même !

Dans le script ci-dessous, la variable DOSSIER sert à déterminer le chemin complet vers le dossier à vérifier. Ensuite, une condition « if/else » permet d’indiquer l’action à effectuer s’il existe et celle à effectuer s’il existe pas. Dans le cas où il n’existe pas, il sera créé avec mkdir. Dans les deux cas, un message informatif est écrit dans le shell Linux :

#!/bin/bash
DOSSIER=/home/tutobox/dossier

if [ -d "$DOSSIER" ]; then
    echo "Le dossier existe ($DOSSIER)"
else
    echo "Le dossier n'existe pas ($DOSSIER). Il va être créé"
    mkdir $DOSSIER
fi

Là encore, il faut créer le script. Par exemple, le script « dossier.sh » pour ce cas :

nano dossier.sh

Indiquez le code ci-dessus dans le fichier du script « dossier.sh », en adaptant le chemin du dossier à vérifier, et éventuellement en ajoutant d’autres actions en fonction de l’objectif de votre script. Enregistrez.

Ajoutez les droits d’exécution sur le fichier « dossier.sh » sinon nous ne pourrons pas l’exécuter sur la machine locale :

chmod +x dossier.sh

Puis, exécutez ce script pour le tester :

./dossier.sh

3. Tester si un fichier n’existe pas en Bash

On peut aussi chercher à faire l’inverse et réaliser une action si le fichier (ou le dossier n’existe pas). Dans ce cas, il faut inverser la condition avec le caractère « ! ». Voici un exemple basé sur ce que l’on a vu précédemment :

#!/bin/bash
FICHIER=/home/tutobox/mon-fichier.txt

if [ ! -f "$FICHIER" ]; then
    echo "Le fichier n'existe pas ($FICHIER)"
fi

Cela se joue à un caractère près ! 😉

4. Conclusion

Grâce à cet article de la boîte à tutoriels informatique, vous êtes capable de vérifier si un fichier ou un dossier existe, ou n’existe pas, dans un script Bash sous Linux !

Vous aimerez aussi...

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *