Я пишу скрипт оболонки для запуску під керуванням KornShell (ksh) на AIX. Я хотів би використати команду mkdir
для створення каталогу. Але каталог може вже існувати, в такому випадку я не хочу нічого робити. Тому я хочу або перевірити, що каталог не існує, або придушити помилку "File exists", яку 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, тому його слід уникати.
Якщо ви хочете уникнути помилки, коли батьківські каталоги не існують, і хочете створити каталог, якщо він не існує, ви можете спочатку тестувати
на існування каталогу:
[ -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
яка створить каталог, якщо його не існує, але попередить вас, якщо ім'я каталогу, який ви намагаєтеся створити, вже використовується чимось іншим, ніж каталог.