Конечно, можно утверждать, что создание родительского каталога должно быть по умолчанию, и можно использовать некоторую опцию проверки, чтобы предотвратить создание каталога, если родительский объект не существует.
Но причина, по которой все наоборот, - просто история. Базовая версия mkdir не создавала родительские каталоги. Вот почему в дистрибутивах X11 появилась команда с именем mkdirhier, которая смогла выполнить эту задачу: проверить, существуют ли родительские каталоги, и при необходимости создать их.
Позже эта функциональность была добавлена к команде mkdir во многих версиях UNIX (я не знаю, входит ли она в стандарт POSIX в настоящее время). Для поддержания совместимости эта функция была доступна при включении флага опции: -p.
Почему плохо включить его по умолчанию? Сценарии могут полагаться на сбой mkdir, если родительский каталог не существует. Тем более, что пользователь root может по умолчанию создавать деревья каталогов.
Пример:
if mkdir /backup/$(uname -n)/$(date +%Y%m%d)
then
perform_backup ...
В этом примере каталог будет создан, и резервное копирование будет выполнено даже в том случае, если файловая система /backupне смонтирована, а родительский /backup/$(uname -n)объект не существует, если по умолчанию будет наоборот.
Практическое правило. Рекомендуется не изменять поведение по умолчанию для любого инструмента. При желании укажите параметры, позволяющие изменить поведение по умолчанию.
alias mkdir="mkdir -p".