Comment mkdir seulement si un répertoire n’existe pas déjà?

J’écris un script shell à exécuter sous KornShell (ksh) sous AIX. Je voudrais utiliser la commande mkdir pour créer un répertoire. Mais le répertoire existe peut-être déjà, auquel cas je ne veux rien faire. Donc, je veux soit tester pour voir que le répertoire n’existe pas, ou supprimer l’erreur “Fichier existe” que mkdir lance lorsqu’il essaie de créer un répertoire existant.

Des idées sur la meilleure façon de le faire?

Essayez mkdir -p :

 mkdir -p foo 

Notez que cela créera également tous les répertoires intermédiaires qui n’existent pas; par exemple,

 mkdir -p foo/bar/baz 

créera des répertoires foo , foo/bar et foo/bar/baz s’ils n’existent pas.

Si vous voulez une erreur lorsque les répertoires parents n’existent pas et souhaitez créer le répertoire s’il n’existe pas, vous pouvez d’abord test l’existence du répertoire:

 [ -d foo ] || mkdir foo 

Cela devrait fonctionner:

 $ mkdir -p dir 

ou:

 if [[ ! -e $dir ]]; then mkdir $dir elif [[ ! -d $dir ]]; then echo "$dir already exists but is not a directory" 1>&2 fi 

ce qui créera le répertoire s’il n’existe pas, mais vous avertira si le nom du répertoire que vous essayez de créer est déjà utilisé par autre chose qu’un répertoire.

Utilisez l’indicateur -p.

 man mkdir mkdir -p foo 

Définir des arborescences de répertoires complexes avec une seule commande

 mkdir -p project/{lib/ext,bin,src,doc/{html,info,pdf},demo/stat/a} 

Si vous ne voulez pas afficher de message d’erreur:

 [ -d newdir ] || mkdir newdir 

Si vous souhaitez afficher votre propre message d’erreur:

 [ -d newdir ] && echo "Directory Exists" || mkdir newdir 

Le vieux essayé et vrai

 mkdir /tmp/qq >/dev/null 2>&1 

fera ce que vous voulez avec aucune des conditions de course que beaucoup des autres solutions ont.

Parfois, les solutions les plus simples (et les plus laides) sont les meilleures.

mkdir foo fonctionne même si le répertoire existe. Pour que cela fonctionne seulement si le répertoire nommé “foo” n’existe pas, essayez d’utiliser l’ -p .

Exemple :-

 mkdir -p foo 

Cela créera le répertoire nommé “foo” seulement s’il n’existe pas. 🙂

 directory_name = "foo" if [ -d $directory_name ] then echo "Directory already exists" else mkdir $directory_name fi 

Ou si vous voulez vérifier l’existence d’abord:

 if [[ ! -e /path/to/newdir ]]; then mkdir /path/to/newdir fi 

-e est le test existant pour korn shell.

Vous pouvez également essayer de googler un manuel de shell korn.

mkdir ne supporte plus le commutateur -p sur les systèmes Windows 8+.

Vous pouvez utiliser ceci:

 IF NOT EXIST dir_name MKDIR dir_name 

C’est une fonction simple (shell bash) qui vous permet de créer un répertoire s’il n’existe pas.

 #---------------------------------- # Create a directory if it doesn't exist #------------------------------------ createDirectory() { if [ ! -d $1 ] then mkdir -p $1 fi } 

Vous pouvez appeler la fonction ci-dessus comme:

createDirectory / tmp / fooDir / BarDir

Ce qui précède crée fooDir et BarDir s’ils n’existent pas. Notez l’option “-p” dans la commande mkdir qui crée des répertoires récursifs. J’espère que cela t’aides.

 mkdir -p sam 
  • mkdir = Créer un répertoire
  • -p = –parents
  • (pas d’erreur si existante, créer des répertoires parents si nécessaire)

Vous pouvez soit utiliser une boucle if pour vérifier si le répertoire existe ou non, s’il ne quitte pas que créer le répertoire.

1) dir = / home / nom_répertoire

 if [ ! -d $dir ] then mkdir $dir else echo "Directory exists" fi 

2) Vous pouvez utiliser le répertoire mkdir avec l’option -p pour créer un répertoire. Il vérifiera si le répertoire n’est pas disponible.

 mkdir -p $dir 

mkdir -p permet également de créer l’arborescence du répertoire. Si vous voulez créer les répertoires parent et enfant en utilisant la même commande, vous pouvez choisir mkdir -p

 mkdir -p /home/parent_dir /home/parent_dir/child1 /home/parent_dir/child2