Opcja „-p” mkdir

100

Więc nie wydaje mi się to strasznie skomplikowane pytanie, ale nie mogę znaleźć odpowiedzi. Nie wiem, co -probi ta opcja w systemie Unix. Użyłem go do zadania laboratoryjnego podczas tworzenia podkatalogu, a następnie innego podkatalogu w tym katalogu. Wyglądało to tak:

mkdir -p cmps012m/lab1

To jest w prywatnym katalogu z normalnymi prawami ( rlidwka). Aha, i czy ktoś mógłby wyjaśnić trochę, co rlidwkato znaczy? Nie jestem całkowitym noobem dla Uniksa, ale nie bardzo wiem, co to oznacza. Mam nadzieję, że to nie jest zbyt niejasne pytanie.

user3476866
źródło
2
man mkdirodpowie na Twoje pytanie. Co do „rlidwki”, to nie mam pojęcia; musisz podać nam więcej kontekstu.
Keith Thompson

Odpowiedzi:

145

Strony podręcznika systemowego są najlepszym źródłem informacji, jakie można znaleźć ... i są na wyciągnięcie ręki: zawiera man mkdirinformacje o -pprzełączniku:

-p, --parents
    no error if existing, make parent directories as needed

Przykład zastosowania: Załóżmy, że chcę utworzyć katalogi, hello/goodbyeale żaden nie istnieje:

$mkdir hello/goodbye
mkdir:cannot create directory 'hello/goodbye': No such file or directory
$mkdir -p hello/goodbye
$

-pstworzył zarówno, jak helloigoodbye

Oznacza to, że polecenie utworzy wszystkie katalogi niezbędne do spełnienia żądania, nie zwracając żadnego błędu, jeśli katalog istnieje .

O mnie rlidwka, Google ma bardzo dobrą pamięć na akronimy :). Moje wyszukiwanie zwróciło to na przykład: http://www.cs.cmu.edu/~help/afs/afs_acls.html

 Directory permissions

l (lookup)
    Allows one to list the contents of a directory. It does not allow the reading of files. 
i (insert)
    Allows one to create new files in a directory or copy new files to a directory. 
d (delete)
    Allows one to remove files and sub-directories from a directory. 
a (administer)
    Allows one to change a directory's ACL. The owner of a directory can always change the ACL of a directory that s/he owns, along with the ACLs of any subdirectories in that directory. 

File permissions

r (read)
    Allows one to read the contents of file in the directory. 
w (write)
    Allows one to modify the contents of files in a directory and use chmod on them. 
k (lock)
    Allows programs to lock files in a directory. 

Stąd rlidwkaoznacza: Wszystkie uprawnienia .

Warto wspomnieć, jak zauważył @KeithThompson w komentarzach, że nie wszystkie systemy Unix obsługują ACL. Więc prawdopodobnie rlidwkakoncepcja nie ma tutaj zastosowania.

Paulo Bu
źródło
1
Jednak nie wszystkie systemy uniksopodobne obsługują listy ACL, więc rlidwkamoże mieć znaczenie lub nie.
Keith Thompson
1
@KeithThompson Cóż, zgadzam się, chciałem tylko wspomnieć, co oznacza ten akronim.
Paulo Bu
1
Tak, ale często samo udzielenie odpowiedzi na czyjeś pytanie jest mniej pomocne niż podanie podstawowych informacji potrzebnych do zrozumienia odpowiedzi.
Keith Thompson
1
Wskażę to w odpowiedzi. Po prostu nie byłam tego świadoma. Dzięki za poprawienie mnie.
Paulo Bu
4
Ta odpowiedź jest najbardziej rozwlekłym sposobem powiedzenia „RTFM, pozwól mi to wygooglować” i bardzo mi się podoba. Kiedyś byłem stażystą noobie, który nic nie wiedział, i zapomniałem o tym, zanim poprosiłem mojego przełożonego, żebym to wyszukał. Nie spiesz się z tymi nowymi facetami; czasami trudno jest dowiedzieć się, co wyszukać w Google. Nie wiesz, czego nie wiesz. Ale po latach każdy staje się bardziej zręczny w googlowaniu.
Dagrooms
4

mkdir [-switch] nazwa folderu

-p jest przełącznikiem, który jest opcjonalny, utworzy podfolder i folder nadrzędny, a nawet folder nadrzędny nie istnieje.

Ze strony podręcznika:

-p, --parents no error if existing, make parent directories as needed

Przykład:

mkdir -p storage/framework/{sessions,views,cache}

Spowoduje to utworzenie sesji podfolderu, widoków, pamięci podręcznej w folderze frameworka, niezależnie od tego, czy „framework” był dostępny wcześniej, czy nie.

Amitesh Bharti
źródło
4

-p|--parentbędzie używany, jeśli próbujesz utworzyć katalog z top-downpodejściem. Spowoduje to utworzenie katalogu nadrzędnego, następnie podrzędnego i tak dalej, jeśli żaden nie istnieje.

-p, --parents brak błędu, jeśli istnieje, tworzy katalogi nadrzędne według potrzeb

O rlidwkato znaczy, dając pełny dostęp lub administracyjnej. Znalazłem go tutaj https://itservices.stanford.edu/service/afs/intro/permissions/unix .

Rahul
źródło
2

Zauważ, że -pjest to argument dlamkdir polecenia, a nie całego systemu Unix. Każde polecenie może mieć potrzebne argumenty.

W tym przypadku oznacza „rodziców”, co oznacza, mkdirże utworzy katalog i wszystkich rodziców, których jeszcze nie ma.

IMSoP
źródło
2

ŚCIEŻKA: Odpowiedziano dawno temu, jednak może być bardziej pomocne myślenie o -p jako o "ścieżce" (łatwiejszej do zapamiętania), ponieważ powoduje to, że mkdir tworzy każdą część ścieżki, której jeszcze nie ma.

mkdir -p / usr / bin / comm / diff / er / fence

jeśli / usr / bin / comm już istnieje, zachowuje się jak: mkdir / usr / bin / comm / diff mkdir / usr / bin / comm / diff / er mkdir / usr / bin / comm / diff / er / fence

Jak widać, oszczędza ci to trochę pisania i myślenia, ponieważ nie musisz zastanawiać się, co już tam jest, a co nie.

Sprawny Mac
źródło