Bash – Tester si un fichier ou un dossier existe
Qu'avons-nous dans la boîte ?
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) :
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 !