web-dev-qa-db-fra.com

Comment utiliser Bash pour créer un dossier s'il n'existe pas déjà?

#!/bin/bash
if [!-d /home/mlzboy/b2c2/shared/db]; then
    mkdir -p /home/mlzboy/b2c2/shared/db;
fi;

Cela ne semble pas fonctionner. Quelqu'un peut-il aider?

161
mlzboy

Premièrement, dans bash "[" est juste une commande, qui attend la chaîne "]" comme dernier argument, ainsi les espaces blancs avant le crochet de fermeture (ainsi qu'entre "!" Et "-d" qui doivent être deux arguments séparés aussi) est important:

if [ ! -d /home/mlzboy/b2c2/shared/db ]; then
  mkdir -p /home/mlzboy/b2c2/shared/db;
fi

Deuxièmement, puisque vous utilisez l'option -p pour passer à mkdir, cette vérification est inutile, car c'est ce qui se passe en premier lieu. Ecrivez:

mkdir -p /home/mlzboy/b2c2/shared/db;

et c'est tout.

259
Maxim Sloyko

En fait, il n’est pas nécessaire de vérifier s’il existe ou non. Puisque vous voulez déjà le créer s'il existe, il suffit de mkdir

mkdir -p /home/mlzboy/b2c2/shared/db
90
kurumi

Faites simplement:

mkdir /path/to/your/potentially/existing/folder

mkdir lancera une erreur si le dossier existe déjà. Pour ignorer les erreurs, écrivez:

mkdir -p /path/to/your/potentially/existing/folder

Pas besoin de faire une vérification ou quelque chose comme ça.


Pour référence:

-p, --parents no error if existing, make parent directories as neededhttp://man7.org/linux/man-pages/man1/mkdir.1.html

60
Automatico

Vous avez besoin d'espaces entre les crochets [ et ]:

#!/bin/bash
if [ ! -d /home/mlzboy/b2c2/shared/db ] 
then
    mkdir -p /home/mlzboy/b2c2/shared/db
fi
19
dogbane

Plus propre, exploitez l'évaluation des raccourcis des opérateurs logiques de Shell. Le côté droit de l'opérateur est exécuté uniquement si le côté gauche est vrai.

[ ! -d /home/mlzboy/b2c2/shared/db ] && mkdir -p /home/mlzboy/b2c2/shared/db
17
plesiv

Je pense que vous devriez reformater un peu votre code:

#!/bin/bash
if [ ! -d /home/mlzboy/b2c2/shared/db ]; then
    mkdir -p /home/mlzboy/b2c2/shared/db;
fi;
4
ivy