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

j'écris un script shell à exécuter sous le KornShell (ksh) sur AIX. Je voudrais 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. Donc je veux soit tester pour voir que le répertoire n'existe pas, soit supprimer l'erreur "File exists" que mkdir lance quand il essaie de créer un répertoire existant.

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

1378
demandé sur Jahid 2009-04-27 18:47:44

13 réponses

Essayer mkdir -p :

mkdir -p foo

notez que cela créera aussi des répertoires intermédiaires qui n'existent pas; par exemple,

mkdir -p foo/bar/baz

va créer des répertoires foo , foo/bar , et foo/bar/baz s'ils n'existent pas.

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

[ -d foo ] || mkdir foo
2385
répondu Brian Campbell 2016-11-24 10:09:33

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 quelque chose d'autre qu'un répertoire.

114
répondu Alnitak 2009-04-27 16:02:35

utilisez le drapeau-p.

man mkdir
mkdir -p foo
71
répondu jimmyorr 2009-04-27 14:50:09

Définition complexe répertoire des arbres avec une seule commande

mkdir -p project/{lib/ext,bin,src,doc/{html,info,pdf},demo/stat/a}
61
répondu Oleg 2013-08-21 20:08:57

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

[ -d newdir ] || mkdir newdir

si vous voulez afficher votre propre message d'erreur:

[ -d newdir ] && echo "Directory Exists" || mkdir newdir
23
répondu Jahid 2015-03-27 05:17:35

La vieille essayé et vrai

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

fera ce que vous voulez sans aucune des conditions de course que beaucoup d'autres solutions ont.

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

18
répondu paxdiablo 2012-12-21 08:40:59

mkdir foo fonctionne même si le répertoire existe. Pour le faire fonctionner que si le répertoire nommé "toto" n'existe pas, essayez d'utiliser le -p pavillon.

exemple: -

mkdir -p foo

cela ne créera le répertoire nommé" foo " que s'il n'existe pas. :)

11
répondu Atul Ranjan 2014-01-20 12:41:38
directory_name = "foo"

if [ -d $directory_name ]
then
    echo "Directory already exists"
else
    mkdir $directory_name
fi
9
répondu Visuwa Bharathi K 2016-10-03 14:57:09

ou si vous voulez vérifier l'existence en premier:

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

-e est l'existence d'essai pour korn shell.

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

7
répondu alkar 2009-04-27 15:16:05

mkdir ne supporte plus l'option-p sur les systèmes Windows 8+.

vous pouvez utiliser ceci:

IF NOT EXIST dir_name MKDIR dir_name
3
répondu Karanvir Kang 2016-11-22 12:39:41

vous pouvez soit utiliser If loop pour vérifier si directory existe ou non, s'il ne sort pas que créer le répertoire.

1) dir= / home /dir_name

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

2) Vous pouvez utiliser l'option mkdir avec-p pour créer un répertoire. Il va vérifier si le répertoire n'est pas disponible, il sera.

mkdir -p $dir

mkdir-p permet également de créer la structure arborescente du répertoire. Si vous souhaitez créer le parent et l'enfant les répertoires utilisant la même commande, peuvent opter pour mkdir-p

mkdir -p /home/parent_dir /home/parent_dir/child1 /home/parent_dir/child2
1
répondu AbhinavVaidya8 2018-08-22 01:50:14

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

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

vous pouvez appeler la fonction ci-dessus comme:

createDirectory/tmp/fooDir / BarDir

ce qui précède crée Fooder et BarDir s'ils n'existent pas. Notez l'option "-p " dans la commande mkdir qui crée les répertoires de façon récursive. Espérons que cette aide.

0
répondu Balaji Boggaram Ramanarayan 2018-02-14 18:54:02
mkdir -p sam
  • mkdir = Faire un Répertoire
  • - P = --parents
  • (pas d'erreur si existant, faire des répertoires parents si nécessaire)
0
répondu Paritosh Yadav 2018-04-20 09:50:04