Как mkdir только если dir еще не существует? - PullRequest
1620 голосов
/ 27 апреля 2009

Я пишу сценарий оболочки для запуска под KornShell (ksh) в AIX. Я хотел бы использовать команду mkdir для создания каталога. Но каталог может уже существовать, и в этом случае я не хочу ничего делать. Поэтому я хочу либо проверить, что каталог не существует, либо подавить ошибку «Файл существует», которую mkdir выдает при попытке создать существующий каталог.

Есть мысли о том, как лучше это сделать?

Ответы [ 14 ]

3 голосов
/ 21 августа 2018

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

1) dir = / home / dir_name

if [ ! -d $dir ]
then
     mkdir $dir
else
     echo "Directory exists"  
fi

2) Для создания каталога вы можете использовать mkdir с опцией -p. Он проверит, если каталог не доступен, он будет.

mkdir -p $dir

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

mkdir -p /home/parent_dir /home/parent_dir/child1 /home/parent_dir/child2
2 голосов
/ 14 февраля 2018

Это простая функция (оболочка bash), которая позволяет вам создавать каталог, если он не существует.

#----------------------------------
# Create a directory if it doesn't exist
#------------------------------------
createDirectory() {
    if [ ! -d $1 ]
        then
        mkdir -p $1
    fi
}

Вы можете вызвать вышеуказанную функцию как:

createDirectory / tmp / fooDir / BarDir

Приведенное выше создает fooDir и BarDir, если они не существуют. Обратите внимание на параметр -p в команде mkdir, которая рекурсивно создает каталоги. Надеюсь, это поможет.

1 голос
/ 22 января 2019

Ссылка на справочную страницу man mkdir для опции - p

   -p, --parents
          no error if existing, make parent directories as needed

, который создаст все каталоги по заданному пути, если существует, не выдаст ошибки, иначе он создаст все каталоги слева направо по заданному пути. Попробуйте команду ниже. каталоги newdir и anotherdir не существует до выдачи этой команды

Правильное использование

mkdir -p /tmp/newdir/anotherdir

После выполнения команды вы можете увидеть newdir и anotherdir, созданные в / tmp. Вы можете выполнить эту команду столько раз, сколько захотите, команда всегда имеет exit(0). По этой причине большинство людей используют эту команду в сценариях оболочки перед использованием этих реальных путей.

1 голос
/ 20 апреля 2018
mkdir -p sam
  • mkdir = Создать каталог
  • -p = --parents
  • (без ошибок, если есть, создайте родительские каталоги при необходимости)
...