Я пишу сценарий оболочки для запуска под KornShell (ksh) в AIX. Я хотел бы использовать mkdir
команду для создания каталога. Но каталог может уже существовать, и в этом случае я не хочу ничего делать. Поэтому я хочу либо проверить, что каталог не существует, либо подавить ошибку «Файл существует», которая mkdir
выдается при попытке создать существующий каталог.
Есть мысли о том, как лучше это сделать?
mkdir
Unix-подобных систем, а не Windows.-p
требуется для соответствия спецификации POSIX / Single Unix, поэтому все, что намеревается соответствовать этим спецификациям, будет поддерживать-p
. Windows совершенно другая, если только вы не используете слой эмуляции POSIX, такой как Cygwin или MSYS.mkdir -p
, вы можете использовать скобки!{}
создать «сложное» дерево каталогов в команде. Смотрите здесь: technosophos.com/2010/04/15/...||
вместо,&&
потому что тогда вся строка имеет правильный статус выхода. Важно, если ваша оболочка работает сerrexit
или эта строка является последней в функции, switch-case, что угодно.mkdir
; оболочка расширяет такое выражение до дискретного списка аргументов, которые передаютсяmkdir
.Это должно работать:
или:
который создаст каталог, если он не существует, но предупредит вас, если имя каталога, который вы пытаетесь создать, уже используется чем-то, кроме каталога.
источник
Используйте флаг -p.
источник
Определение сложных деревьев каталогов с помощью одной команды
источник
mkdir
, а оболочка, которая выполняет команду. Это называется расширением скобок - AFAIK, только Bash, ksh, zsh и оболочка C поддерживают его.folder name
вам нужно использоватьfolder\ name
)Если вы не хотите показывать какое-либо сообщение об ошибке:
Если вы хотите показать свое собственное сообщение об ошибке:
источник
Старый проверенный и верный
будет делать то, что вы хотите, ни с одним из условий гонки, которые есть во многих других решениях.
Иногда самые простые (и самые уродливые) решения являются лучшими.
источник
mkdir foo
работает, даже если каталог существует. Чтобы он работал, только если каталог с именем "foo" не существует, попробуйте использовать-p
флаг.Пример :-
Это создаст каталог с именем "foo", только если он не существует. :)
источник
источник
Или, если вы хотите сначала проверить существование:
-e это существующий тест для оболочки korn.
Вы также можете попробовать поискать руководство по оболочке korn.
источник
mkdir больше не поддерживает ключ -p в системах Windows 8+.
Вы можете использовать это:
источник
Ссылаясь на справочную страницу
man mkdir
для варианта -p
который создаст все каталоги по заданному пути, если существует, не выдаст ошибку, иначе он создаст все каталоги слева направо по заданному пути. Попробуйте команду ниже. каталоги
newdir
иanotherdir
не существует до выдачи этой командыПравильное использование
mkdir -p /tmp/newdir/anotherdir
После выполнения команды вы можете увидеть
newdir
иanotherdir
создать ее в / tmp. Вы можете выполнить эту команду столько раз, сколько хотите, команда всегда имеетexit(0)
. По этой причине большинство людей используют эту команду в сценариях оболочки, прежде чем использовать эти фактические пути.источник
Вы можете использовать цикл if, чтобы проверить, существует ли каталог или нет, если он не выходит, чем создать каталог.
1) dir = / home / dir_name
2) Вы можете использовать каталог mkdir с параметром -p для создания каталога. Он проверит, если каталог не доступен, он будет.
mkdir -p также позволяет создавать древовидную структуру каталога. Если вы хотите создать родительские и дочерние каталоги, используя одну и ту же команду, можете выбрать mkdir -p
источник
Это простая функция (оболочка bash), которая позволяет вам создавать каталог, если он не существует.
Вы можете вызвать вышеуказанную функцию как:
Приведенное выше создает fooDir и BarDir, если они не существуют. Обратите внимание на параметр -p в команде mkdir, которая рекурсивно создает каталоги. Надеюсь это поможет.
источник
источник
источник