Pour créer un répertoire sous Linux, vous utilisez la commande mkdir . Cela signifie “make directory” après tout. C’est une commande assez simple.

Mais, lorsque vous essayez de créer un répertoire qui existe déjà, vous obtenez une erreur du type :

$ mkdir dir0
mkdir: cannot create directory ‘dir0’: File exists

Cela indique que si un répertoire existe déjà, la commande mkdir n’essaiera en aucun cas de créer ou de modifier le répertoire déjà existant.

Mais cela montre également une erreur qui n’est pas ce que vous voulez toujours, surtout si vous écrivez un script bash.

Pour éviter cette erreur, utilisez le -pdrapeau avec la mkdircommande.

mkdir -p dirname

De cette façon, bien que le répertoire ne soit pas créé, il n’affichera pas non plus d’erreur. Vos scripts s’exécuteront comme d’habitude.

💡Vous obtiendrez la même erreur si un fichier ou un lien existe avec le même nom que le répertoire que vous essayez de créer. Pourquoi? Parce que tout est un fichier sous Linux. Un répertoire est un fichier spécial qui agit comme un index de tous les fichiers qu’il contient.

Voyons les choses un peu plus en détail ici et discutons des différentes manières de prévenir cette erreur.

Méthode 1 : Utiliser l’option ‘-p’

Si vous regardez la page de manuel de la commande mkdir, elle a le drapeau ‘-p’.

L’utilisation du drapeau ‘-p’ dans mkdir est “aucune erreur si elle existe, créez des répertoires parents si nécessaire”.

Lorsque vous utilisez le drapeau ‘-p’, l’utilitaire mkdir vérifiera si un répertoire, un fichier, un lien ou un tube portant le même nom n’existe pas déjà.

Si le existe, il ne modifiera pas votre répertoire ou fichier existant et n’affichera pas non plus de message d’erreur.

mkdir -p dirname

pas de sortie car il n’en existe pas

Ceci est très pratique lorsque vous créez des scripts bash personnalisés et que vous ne voulez pas que son exécution s’arrête à cause de cette erreur.

Le -ppeut également être utilisé pour créer une structure de répertoire imbriquée . Si vous souhaitez créer dir1/dir2/dir3 comme une structure de répertoires et que certains ou aucun des répertoires n’existent dans la hiérarchie.

Méthode 2 : Vérifier si le répertoire existe déjà dans bash

Si vous écrivez des scripts bash, vous pouvez utiliser la condition if et vérifier si le répertoire existe déjà . Si ce n’est pas le cas, vous créez le répertoire.

Voici un exemple de code :

if [ -d my_dir ]
then
    mkdir my_dir
fi

Méthode 3 : Envoyez-le dans le vide

La majorité des outils UNIX ont deux flux de sortie, stdout et stderr. Normalement, les deux flux, stdout et stderr sont imprimés sur le terminal. Mais vous pouvez rediriger le flux de sortie normal ou le flux d’erreur vers un autre fichier .

Ainsi, lorsque la commande mkdir génère une erreur sur votre terminal, vous pouvez la rediriger vers le void.

Pour rediriger stdout, utilisez-le avec le descripteur de flux numérique ‘1’, pour stderr, utilisez le descripteur de flux numérique ‘2’. Vous pouvez également rediriger stdin en utilisant le descripteur de flux ‘0’.

Pour rediriger réellement la sortie, utilisez le descripteur de flux approprié avec l’opérateur de redirection ‘>’

$ mkdir dir0 2> /dev/null

Cela enverra la sortie de stderr au périphérique ‘/dev/null’ qui rejette tout ce qui y est écrit.

C’est totalement sûr à faire. Comme je l’ai mentionné précédemment, si le répertoire existe déjà, il ne sera pas modifié. Seul un message d’erreur s’affichera. Tout ce que vous faites ici est de supprimer ce message d’erreur.

Personnellement, j’opterais pour la première méthode, c’est-à-dire en utilisant la mkdir -pcommande pour s’assurer que le répertoire est créé uniquement s’il n’y a pas de fichier ou de répertoire du même nom au même emplacement.

Étiqueté dans :

À propos de l'auteur

SAKHRI Mohamed

Le blog d'un passionné d'informatique qui partage des actualités, des tutoriels, des astuces, des outils en ligne et des logiciels pour Windows, macOS, Linux, Web designer et jeux vidéo.

Voir tous les articles