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

linux Scripts

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

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

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

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

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

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

Вы получите ту же ошибку, если существует файл или ссылка с тем же именем, что и каталог, который вы пытаетесь создать. Почему? Потому что в Linux все является файлом. Каталог - это специальный файл, который действует как индекс всех файлов, которые находятся внутри него.

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

Используйте опцию '-p'

Если вы посмотрите на manpage команды mkdir, то у нее есть флаг '-p'.

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

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

Если такой каталог существует, она не будет изменять существующий каталог или файл и не выдаст сообщение об ошибке.

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

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

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

Проверьте, существует ли уже каталог в bash

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

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

Отправить в пустоту

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

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

Чтобы перенаправить stdout, используйте его вместе с числовым дескриптором потока '1', а для stderr - числовой дескриптор потока '2'. Вы также можете перенаправить stdin, используя дескриптор потока '0'.

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

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

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

Avatar for Gnostis
Gnostis
Добавить комментарий