Как сделать mkdir, только если каталог еще не существует?
Вопрос
Я пишу сценарий оболочки для запуска под управлением KornShell (ksh) в AIX.Я хотел бы использовать mkdir
команда для создания каталога.Но каталог может уже существовать, и в этом случае я не хочу ничего делать.Поэтому я хочу либо проверить, что каталог не существует, либо подавить ошибку «Файл существует», которая mkdir
выдает, когда пытается создать существующий каталог.
Есть мысли, как лучше это сделать?
Решение
Пытаться mkdir -p
:
mkdir -p foo
Обратите внимание, что при этом также будут созданы несуществующие промежуточные каталоги;например,
mkdir -p foo/bar/baz
создаст каталоги foo
, foo/bar
, и foo/bar/baz
если они не существуют.
Некоторые реализации, такие как GNU mkdir
включать mkdir --parents
как более читаемый псевдоним, но он не указан в спецификации POSIX/Single Unix и недоступен на многих распространенных платформах, таких как macOS, различные BSD и различные коммерческие Unix, поэтому его следует избегать.
Если вам нужна ошибка, когда родительские каталоги не существуют, и вы хотите создать каталог, если он не существует, вы можете 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
который создаст каталог, если он не существует, но предупредит вас, если имя каталога, который вы пытаетесь создать, уже используется чем-то другим, кроме каталога.
Используйте флаг -p.
man mkdir
mkdir -p foo
Определение сложных деревьев каталогов с помощью одной команды
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
-е это тест существования оболочки Korn.
Вы также можете попробовать поискать в Google руководство по оболочке Korn.
mkdir больше не поддерживает ключ -p в системах Windows 8+.
Вы можете использовать это:
IF NOT EXIST dir_name MKDIR dir_name
Вы можете использовать цикл if, чтобы проверить, существует ли каталог или нет, если он не завершается, то создайте каталог.
1) каталог=/home/имя_каталога
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
Это простая функция (оболочка 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, которая рекурсивно создает каталоги.Надеюсь это поможет.
Ссылка на справочную страницу 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)
.По этой причине большинство людей используют эту команду в сценариях оболочки перед использованием реальных путей.
mkdir -p sam
- mkdir = Создать каталог
- -p = --parents
- (нет ошибок, если они существуют, при необходимости создайте родительские каталоги)