Question Comment faire pour 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 le mkdir commande 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, ou supprimer l'erreur "Fichier existe" mkdir jette quand il essaie de créer un répertoire existant.

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


1329
2018-04-27 14:47


origine


Réponses:


Essayer mkdir -p:

mkdir -p foo

Notez que cela créera également 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 si elles n'existent pas.

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

[ -d foo ] || mkdir foo

2307
2018-04-27 14:49



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.


109
2018-04-27 14:50



Utilisez le drapeau -p.

man mkdir
mkdir -p foo

70
2018-04-27 14:50



Définition d'arborescences de répertoires complexes avec une seule commande

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

58
2017-08-21 20:08



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

20
2018-03-27 03:57



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 d'autres solutions ont.

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


17
2018-01-20 12:23



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 le -p drapeau.

Exemple :-

mkdir -p foo

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


10
2017-12-16 11:34



directory_name = "foo"

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

9
2018-04-27 14:51



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

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

-e est le test existe pour le shell korn.

Vous pouvez également essayer googling un manuel de coquille de korn.


7
2017-11-22 12:39