2297 votes

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

Je suis en train d'écrire un script à exécuter en vertu du KornShell (ksh) sur AIX. Je voudrais utiliser la commande mkdir pour créer un répertoire. Mais le répertoire n'existe pas déjà, dans ce cas, je ne veux pas faire quoi que ce soit. J'ai donc envie de tester pour voir que le répertoire n'existe pas, ou de supprimer l' "le Fichier existe" erreur mkdir jette lorsqu'il essaie de créer un répertoire existant.

Toute réflexion sur la meilleure façon de le faire?

3811voto

Brian Campbell Points 101107

Essayez mkdir -p:

mkdir -p foo

Notez qu'il sera également créer intermédiaire des répertoires qui n'existent pas; par exemple,

mkdir -p foo/bar/baz

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

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

[ -d foo ] || mkdir foo

197voto

Alnitak Points 143355

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 va créer le répertoire s'il n'existe pas, mais vous avertir si le nom du répertoire que vous essayez de créer est déjà en cours d'utilisation par autre chose que d'un répertoire.

95voto

jimmyorr Points 3004

Utilisez l'option-p.

man mkdir
mkdir -p foo

78voto

Oleg Points 101

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}

23voto

paxdiablo Points 341644

L'ancien essayé et vrai

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

à faire ce que vous voulez avec aucune des conditions de course de nombreux autres solutions.

Parfois, le plus simple (et le plus laid) les solutions sont les meilleures.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X