Как сделать mkdir только в том случае, если dir еще не существует?
Я пишу сценарий оболочки для запуска под KornShell (ksh) на AIX. Я хотел бы использовать mkdir команда для создания каталога. Но каталог может уже существовать, и в этом случае я не хочу ничего делать. Поэтому я хочу либо проверить, чтобы увидеть, что каталог не существует, либо подавить ошибку "файл существует", которая mkdir Выкидывает при попытке создать уже существующий каталог.
любые мысли о том, как лучше это сделать?
13 ответов:
попробовать
mkdir -p:mkdir -p fooобратите внимание, что это также создаст все промежуточные каталоги не существуют; например,
mkdir -p foo/bar/bazсоздаст каталоги
foo,foo/barиfoo/bar/bazесли они не существуют.если вы хотите ошибку, когда родительские каталоги не существуют, и хотите создать каталог, если он не существует, то вы можете
testдля существования каталога первый:[ -d foo ] || mkdir foo
Это должно работать:
$ mkdir -p dirили:
if [[ ! -e $dir ]]; then mkdir $dir elif [[ ! -d $dir ]]; then echo "$dir already exists but is not a directory" 1>&2 fiкоторый создаст каталог, если он не существует, но предупредит вас, если имя каталога, который вы пытаетесь создать, уже используется чем-то другим, чем каталог.
определение сложных деревьев каталогов с помощью одной команды
mkdir -p project/{lib/ext,bin,src,doc/{html,info,pdf},demo/stat/a}
Если вы не хотите показывать сообщение об ошибке:
[ -d newdir ] || mkdir newdirЕсли вы хотите показать свое собственное сообщение об ошибке:
[ -d newdir ] && echo "Directory Exists" || mkdir newdir
старый проверенный и верный
mkdir /tmp/qq >/dev/null 2>&1будет делать то, что вы хотите ни с одним из условий гонки многие другие решения имеют.
иногда самые простые (и уродливые) решения являются лучшими.
mkdir fooработает, даже если каталог существует. Чтобы он работал только в том случае, если каталог с именем " foo " не существует, попробуйте использовать-pфлаг.пример:
mkdir -p fooэто создаст каталог с именем "foo", только если он не существует. :)
directory_name = "foo" if [ -d $directory_name ] then echo "Directory already exists" else mkdir $directory_name fi
или если вы хотите сначала проверить наличие:
if [[ ! -e /path/to/newdir ]]; then mkdir /path/to/newdir fi- e - Это тест exist для оболочки korn.
вы также можете попробовать погуглить руководство Korn shell.
mkdir больше не поддерживает переключатель-p в системах Windows 8+.
вы можете использовать это:
IF NOT EXIST dir_name MKDIR dir_name
вы можете использовать цикл if, чтобы проверить, существует ли каталог или нет, если он не выходит, чем создать каталог.
1) dir= / home / dir_name
if [ ! -d $dir ] then mkdir $dir else echo "Directory exists" fi2) Вы можете использовать каталог mkdir с опцией-p для создания каталога. Он будет проверять, если каталог не доступен он будет.
mkdir -p $dirкоманды mkdir -p также позволяет создать древовидную структуру каталога. Если вы хотите создать родительский и дочерний каталоги с помощью одной команды, можно выбрать mkdir - п
mkdir -p /home/parent_dir /home/parent_dir/child1 /home/parent_dir/child2
это простая функция (оболочка bash), которая позволяет создавать каталог, если он не существует.
#---------------------------------- # Create a directory if it doesn't exist #------------------------------------ createDirectory() { if [ ! -d ] then mkdir -p fi }вы можете вызвать вышеуказанную функцию как:
createDirectory/tmp/fooDir / BarDir
вышеизложенное создает fooDir и BarDir, если они не существуют. Обратите внимание на опцию"- p " в команде mkdir, которая рекурсивно создает каталоги. Надеюсь, это поможет.
mkdir -p sam
- mkdir = сделать каталог
- - p = -- родители
- (без ошибок, если они существуют, сделайте родительские каталоги по мере необходимости)
Comments