Поиск по сайту:

У кого есть друзья, у того нет друга (Аристотель).

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

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

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

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

 

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

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

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

mkdir -p dirname

 

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

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

 

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

 

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

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

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

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

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

mkdir -p dirname

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

 

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

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

Читать  Как просмотреть журналы доступа Apache Tomcat

 

Способ 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 для обеспечения создания каталога только в том случае, если в том же месте нет файла или каталога с таким же именем.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Загрузка...
Поделиться в соц. сетях:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

**URL-адрес комментаторов с открытой ссылкой

0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии

Читайте также

0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам:

Заполните форму и наш менеджер перезвонит Вам в самое ближайшее время!

badge
Обратный звонок 1
Отправить
galka

Спасибо! Ваша заявка принята

close
galka

Спасибо! Ваша заявка принята

close