Как 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.
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"
fi
2) Вы можете использовать каталог 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 = -- родители
- (нет ошибки, если она существует, сделайте родительские каталоги по мере необходимости)