Oczywiście można argumentować, że tworzenie katalogu nadrzędnego powinno być domyślnym i można użyć opcji sprawdzania, aby zapobiec tworzeniu katalogu, jeśli rodzic nie istnieje.
Ale powodem, dla którego jest odwrotnie, jest po prostu historia. Podstawowa wersja mkdir nie tworzyła katalogów nadrzędnych. Dlatego do dystrybucji X11 dołączono polecenie o nazwie mkdirhier, które było w stanie wykonać to zadanie: sprawdź, czy istnieją katalogi nadrzędne i utwórz je, jeśli to konieczne.
Później ta funkcjonalność została dodana do polecenia mkdir w wielu wersjach UNIX (nie wiem, czy obecnie jest w standardzie POSIX). Aby zachować zgodność ta funkcja została udostępniona przez włączanie flagą opcji: -p
.
Dlaczego źle jest mieć domyślnie włączone? Skrypty mogą polegać na awarii mkdir, jeśli katalog macierzysty nie istnieje. Szczególnie jako root użytkownika tworzenie drzew katalogów może być niebezpieczne.
Przykład:
if mkdir /backup/$(uname -n)/$(date +%Y%m%d)
then
perform_backup ...
W tym przykładzie katalog zostałby utworzony, a tworzenie kopii zapasowej nawet wtedy, gdy system plików /backup
nie jest podłączony, a element nadrzędny /backup/$(uname -n)
nie istnieje, jeśli domyślnie byłby odwrotnie.
Ogólna zasada: dobrą praktyką jest nie zmieniać domyślnego zachowania jakiegokolwiek narzędzia. W razie potrzeby podaj opcje umożliwiające zmianę domyślnego zachowania.
alias mkdir="mkdir -p"
.