Как использовать Bash для создания папки, если она еще не существует? - PullRequest
156 голосов
/ 05 февраля 2011
#!/bin/bash
if [!-d /home/mlzboy/b2c2/shared/db]; then
    mkdir -p /home/mlzboy/b2c2/shared/db;
fi;

Это не похоже на работу. Кто-нибудь может помочь?

Ответы [ 6 ]

251 голосов
/ 05 февраля 2011

Во-первых, в bash "[" это просто команда, которая ожидает строку "]" в качестве последнего аргумента, поэтому пробел перед закрывающей скобкой (а также между "!" И "-d", которые должны быть два отдельных аргумента тоже) важно:

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

Во-вторых, поскольку вы используете ключ -p для mkdir, эта проверка бесполезна, потому что именно это и происходит в первую очередь. Просто напишите:

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

и это все.

88 голосов
/ 05 февраля 2011

Нет необходимости проверять, существует он или нет. Поскольку вы уже хотите создать его, если он существует, просто mkdir сделает

mkdir -p /home/mlzboy/b2c2/shared/db
58 голосов
/ 25 февраля 2013

Просто выполните:

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

mkdir выдаст ошибку, если папка уже существует.Чтобы игнорировать ошибки, напишите:

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

Нет необходимости выполнять какие-либо проверки или что-либо подобное.


Для справки:

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

18 голосов
/ 05 февраля 2011

Вам нужны пробелы в скобках [ и ]:

#!/bin/bash
if [ ! -d /home/mlzboy/b2c2/shared/db ] 
then
    mkdir -p /home/mlzboy/b2c2/shared/db
fi
17 голосов
/ 09 июня 2014

Более чистым способом, используйте ускоренную оценку логических операторов оболочки.Правая сторона оператора выполняется только в том случае, если левая сторона имеет значение true.

[ ! -d /home/mlzboy/b2c2/shared/db ] && mkdir -p /home/mlzboy/b2c2/shared/db
4 голосов
/ 05 февраля 2011

Я думаю, вам следует немного переформатировать код:

#!/bin/bash
if [ ! -d /home/mlzboy/b2c2/shared/db ]; then
    mkdir -p /home/mlzboy/b2c2/shared/db;
fi;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...