web-dev-qa-db-fra.com

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

J'écris un script Shell à exécuter sous KornShell (ksh) sous AIX. J'aimerais utiliser la commande mkdir pour créer un répertoire. Mais le répertoire peut déjà exister, auquel cas je ne veux rien faire. Je souhaite donc soit vérifier que le répertoire n'existe pas, soit supprimer l'erreur "Le fichier existe" générée par mkdir lorsqu'elle tente de créer un répertoire existant. 

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

1501
Spike Williams

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.

Certaines implémentations telles que GNU mkdir incluent mkdir --parents en tant qu'alias plus lisible, mais cela n'est pas spécifié dans la spécification POSIX/Single Unix et n'est pas disponible sur de nombreuses plates-formes courantes telles que macOS, divers BSD et divers Unix commerciaux. évité.

Si vous voulez une erreur lorsque les répertoires parents n'existent pas et que vous voulez créer le répertoire s'il n'existe pas, vous pouvez alors test pour l'existence du répertoire:

[ -d foo ] || mkdir foo
2592
Brian Campbell

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

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.

133
Alnitak

Utilisez le drapeau -p. 

man mkdir
mkdir -p foo
76
jimmyorr

Définir des arborescences complexes avec une seule commande

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

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
28
Jahid

Le vieux essayé et vrai

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

fera ce que vous voulez avec aucune des conditions de course de nombreuses solutions.

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

18
paxdiablo

mkdir foo fonctionne même si le répertoire existe ..__ Pour le faire fonctionner uniquement si le répertoire nommé "foo" n'existe pas, essayez d'utiliser l'indicateur -p.

Exemple :-

mkdir -p foo

Cela créera le répertoire nommé "foo" seulement s'il n'existe pas. :)

13
Atul Ranjan
directory_name = "foo"

if [ -d $directory_name ]
then
    echo "Directory already exists"
else
    mkdir $directory_name
fi
10
Visuwa Bharathi K

Ou si vous voulez vérifier l'existence au préalable:

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

-e est le test exist pour korn Shell.

Vous pouvez également essayer de googler un manuel de Shell Korn.

7
alkar

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

Vous pouvez utiliser ceci:

IF NOT EXIST dir_name MKDIR dir_name
7
Karanvir Kang

Vous pouvez soit utiliser if loop pour vérifier si le répertoire existe ou non, s'il ne existe pas, créez le répertoire.

1) dir =/home/dir_name

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, il le fera. 

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
2
AbhinavVaidya8
mkdir -p sam
  • mkdir = Créer un répertoire
  • -p = --parents
  • (pas d'erreur si existant, créez des répertoires parents au besoin)
1
Paritosh Yadav

C'est une fonction simple (bash Shell) 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 en tant que: 

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 de manière récursive. J'espère que cela t'aides.

Référence à la page de manuel man mkdir pour l’option -p

   -p, --parents
          no error if existing, make parent directories as needed

qui créera tous les répertoires dans un chemin donné, s’il existe ne génère pas d’erreur sinon il crée tous les répertoires de gauche à droite dans le chemin donné Essayez la commande ci-dessous. les répertoires newdir et anotherdir n'existent pas avant l'exécution de cette commande

Usage correct

mkdir -p /tmp/newdir/anotherdir

Après avoir exécuté la commande, vous pouvez voir newdir et anotherdir créés sous/tmp. Vous pouvez émettre cette commande autant de fois que vous le souhaitez, la commande a toujours exit(0). C'est pour cette raison que la plupart des gens utilisent cette commande dans les scripts Shell avant d'utiliser ces chemins d'accès réels.

1
vkrams