Piszę skrypt powłoki, aby działał pod KornShell (ksh) w systemie AIX. Chciałbym użyć mkdir
polecenia, aby utworzyć katalog. Ale katalog może już istnieć, w którym to przypadku nie chcę nic robić. Dlatego chcę albo przetestować, aby stwierdzić, że katalog nie istnieje, albo ukryć błąd „Plik istnieje”, który mkdir
pojawia się, gdy próbuje utworzyć istniejący katalog.
Wszelkie przemyślenia na temat tego, jak najlepiej to zrobić?
mkdir
systemów uniksopodobnych, a nie Windows.-p
jest wymagany do zgodności ze specyfikacją POSIX / Single Unix Specification, więc wszystko, co będzie zgodne z tymi specyfikacjami, będzie obsługiwane-p
. Windows jest zupełnie inny, chyba że użyjesz warstwy emulacji POSIX, takiej jak Cygwin lub MSYS.mkdir -p
, możesz użyć nawiasów!{}
aby utworzyć „złożone” drzewo katalogów w poleceniu. Zobacz tutaj: technosophos.com/2010/04/15/…||
zamiast,&&
ponieważ wtedy cała linia ma właściwy status wyjścia. Ważne, jeśli twoja powłoka działa zerrexit
lub jeśli ta linia jest ostatnią linią w funkcji, przełączniku, cokolwiek.mkdir
; powłoka rozwija takie wyrażenie na dyskretną listę argumentów, które są przekazywanemkdir
.To powinno działać:
lub:
który utworzy katalog, jeśli nie istnieje, ale ostrzega, jeśli nazwa katalogu, który próbujesz utworzyć, jest już używana przez coś innego niż katalog.
źródło
Użyj flagi -p.
źródło
Definiowanie złożonych drzew katalogów za pomocą jednego polecenia
źródło
mkdir
sama w sobie, ale powłoka, która wykonuje polecenie. Nazywa się to rozszerzaniem nawiasów klamrowych - AFAIK, obsługują go tylko Bash, ksh, zsh i powłoka C.folder name
musisz użyćfolder\ name
)Jeśli nie chcesz wyświetlać żadnego komunikatu o błędzie:
Jeśli chcesz wyświetlić własny komunikat o błędzie:
źródło
Stare wypróbowane i prawdziwe
zrobi to, co chcesz, w żadnym z warunków wyścigu, które ma wiele innych rozwiązań.
Czasem najprostsze (i najbrzydsze) rozwiązania są najlepsze.
źródło
mkdir foo
działa, nawet jeśli katalog istnieje. Aby działał tylko wtedy, gdy katalog o nazwie „foo” nie istnieje, spróbuj użyć-p
flagi.Przykład: -
Spowoduje to utworzenie katalogu o nazwie „foo”, tylko jeśli nie istnieje. :)
źródło
źródło
Lub jeśli chcesz najpierw sprawdzić istnienie:
-e to istniejący test dla powłoki Korn.
Możesz także wypróbować przeglądanie instrukcji obsługi skorupy Korn.
źródło
mkdir nie obsługuje już przełączania -p w systemach Windows 8+.
Możesz użyć tego:
źródło
Odwoływanie się do strony
man mkdir
podręcznika dla opcji -p
który utworzy wszystkie katalogi na danej ścieżce, jeśli istnieje, nie spowoduje błędu, w przeciwnym razie utworzy wszystkie katalogi od lewej do prawej na danej ścieżce. Wypróbuj poniższe polecenie. katalogi
newdir
ianotherdir
nie istnieje przed wydaniem tego poleceniaPrawidłowa obsługa
mkdir -p /tmp/newdir/anotherdir
Po wykonaniu polecenia możesz zobaczyć
newdir
ianotherdir
utworzyć w / tmp. Możesz wydać to polecenie tyle razy, ile chcesz, polecenie zawsze maexit(0)
. Z tego powodu większość ludzi używa tego polecenia w skryptach powłoki przed użyciem rzeczywistych ścieżek.źródło
Możesz użyć pętli if, aby sprawdzić, czy katalog istnieje, czy nie, jeśli nie wychodzi, niż utworzyć katalog.
1) dir = / home / dir_name
2) Możesz stworzyć katalog używając mkdir z opcją -p. Sprawdza, czy katalog nie jest dostępny, będzie.
mkdir -p pozwala również utworzyć strukturę drzewa katalogu. Jeśli chcesz utworzyć katalog macierzysty i podrzędny za pomocą tego samego polecenia, możesz wybrać mkdir -p
źródło
Jest to prosta funkcja (powłoka bash), która pozwala utworzyć katalog, jeśli nie istnieje.
Możesz wywołać powyższą funkcję jako:
Powyższe tworzy fooDir i BarDir, jeśli nie istnieją. Zwróć uwagę na opcję „-p” w komendzie mkdir, która rekursywnie tworzy katalogi. Mam nadzieję że to pomoże.
źródło
źródło
źródło