ИТ Блог. Администрирование серверов на основе Linux (Ubuntu, Debian, CentOS, openSUSE)

Создать каталог, только если он еще не существует в Linux

Создать каталог, только если он еще не существует в Linux

Чтобы создать каталог в Linux, вы используете команду mkdir. В конце концов, это означает «создать каталог». Это довольно простая команда.

Но когда вы пытаетесь создать уже существующий каталог, вы получаете сообщение об ошибке, например:

$ mkdir dir0
mkdir: cannot create directory ‘dir0’: File exists

 

Это означает, что если каталог уже существует, команда mkdir не будет пытаться каким-либо образом создать или изменить уже существующий каталог.

Но он также показывает ошибку, а это не то, что вам всегда нужно, особенно если вы пишете сценарий bash.

Чтобы предотвратить эту ошибку, используйте флаг -p вместе с командой mkdir.

mkdir -p dirname

 

Таким образом, хотя каталог не создается, он также не будет показывать никаких ошибок. Ваши скрипты будут работать как обычно.

 

Давайте посмотрим здесь подробнее и обсудим различные способы предотвращения этой ошибки.

 

Способ 1: используйте параметр «-p»

Если вы посмотрите на справочную страницу команды mkdir, у нее есть флаг «-p».

Использование флага «-p» в mkdir означает «нет ошибки, если она существует, создайте родительские каталоги по мере необходимости».

Когда вы используете флаг ‘-p’, утилита mkdir проверит, не существует ли уже каталог, файл, ссылка или канал с таким именем.

Если он существует, он не изменит ваш существующий каталог или файл и не покажет сообщение об ошибке.

mkdir -p dirname

нет вывода, потому что его не существует

 

Это очень удобно, когда вы создаете пользовательские сценарии bash и не хотите, чтобы их выполнение останавливалось из-за этой ошибки.

Также -p может использоваться для создания вложенной структуры каталогов. Если вы хотите создать структуру каталогов, аналогичную каталогу dir1/dir2/dir3, и некоторые каталоги или ни один из них не существует в иерархии.

 

Способ 2: проверьте, существует ли уже каталог в bash

Если вы пишете сценарии bash, вы можете использовать условие if и проверить, существует ли уже каталог . Если это не так, вы создаете каталог.

Вот пример кода:

if [ -d my_dir ]
then
    mkdir my_dir
fi

 

Способ 3: отправить в пустоту

Большинство инструментов UNIX имеют два потока вывода: stdout и stderr. Обычно оба потока, stdout и stderr, выводятся на терминал. Но вы можете перенаправить либо обычный поток вывода, либо поток ошибок в другой файл.

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

Для перенаправления stdout используйте его вместе с числовым дескриптором потока «1», для stderr используйте числовой дескриптор потока «2». Вы также можете перенаправить стандартный ввод с помощью дескриптора потока «0».

Чтобы на самом деле перенаправить вывод, используйте соответствующий дескриптор потока вместе с оператором перенаправления ‘>’

$ mkdir dir0 2> /dev/null

 

Это отправит вывод stderr на устройство «/dev/null», которое отбрасывает все, что на него записывается.

Это абсолютно безопасно. Как мы упоминали ранее, если каталог уже существует, он не будет изменен. Будет показано только сообщение об ошибке. Все, что вы здесь делаете, это подавляете это сообщение об ошибке.

Лично мы бы выбрали первый метод, т.е. использование команды mkdir -p для обеспечения создания каталога только в том случае, если в том же месте нет файла или каталога с таким же именем.

Exit mobile version