mkdirs Option "-p"

96

Das scheint also keine schrecklich komplizierte Frage zu sein, aber ich kann keine Antwort darauf finden. Ich bin verwirrt darüber, was die -pOption unter Unix bewirkt. Ich habe es für eine Laboraufgabe verwendet, während ich ein Unterverzeichnis und dann ein weiteres Unterverzeichnis in diesem erstellt habe. Es sah so aus:

mkdir -p cmps012m/lab1

Dies ist in einem privaten Verzeichnis mit normalen Rechten ( rlidwka). Oh, und würde es jemandem etwas ausmachen, eine kleine Erklärung zu geben, was rlidwkabedeutet? Ich bin kein absoluter Neuling in Unix, aber ich bin nicht wirklich vertraut damit, was dies bedeutet. Hoffentlich ist das keine allzu vage Frage.

user3476866
quelle
2
man mkdirwird Ihre Frage beantworten. Was "rlidwka" betrifft, habe ich keine Ahnung; Sie müssen uns mehr Kontext geben.
Keith Thompson

Antworten:

138

Der Man - Pages ist die beste Quelle für Informationen , die Sie finden können ... und ist auf Knopfdruck : man mkdirergibt dies über -pSchalter:

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

Anwendungsfallbeispiel: Angenommen, ich möchte Verzeichnisse erstellen, hello/goodbyeaber es gibt keine:

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

-pbeide erstellt, helloundgoodbye

Dies bedeutet, dass der Befehl alle zur Erfüllung Ihrer Anforderung erforderlichen Verzeichnisse erstellt und keinen Fehler zurückgibt, falls dieses Verzeichnis vorhanden ist .

Über rlidwka, Google hat ein sehr gutes Gedächtnis für Akronyme :). Meine Suche ergab dies zum Beispiel: 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. 

Daher rlidwkabedeutet: Alle Berechtigungen auf .

Wie @KeithThompson in den Kommentaren hervorhob, ist es erwähnenswert, dass nicht alle Unix-Systeme ACL unterstützen. Wahrscheinlich rlidwkatrifft das Konzept hier nicht zu.

Paulo Bu
quelle
1
Da jedoch nicht alle Unix-ähnlichen Systeme ACLs unterstützen, rlidwkakann dies sinnvoll sein oder auch nicht.
Keith Thompson
1
@KeithThompson Nun, ich stimme zu, ich wollte nur erwähnen, wofür das Akronym steht.
Paulo Bu
1
Ja, aber oft ist es weniger hilfreich, nur die Frage einer Person zu beantworten, als Hintergrundinformationen bereitzustellen, die zum Verständnis der Antwort erforderlich sind.
Keith Thompson
1
Ich werde in der Antwort darauf hinweisen. Ich war mir dessen einfach nicht bewusst. Danke, dass du mich verbessert hast.
Paulo Bu
4
Diese Antwort ist die ausführlichste Art zu sagen "RTFM, lass mich das für dich googeln" und ich liebe es. Ich war einmal ein Noobie-Praktikant, der nichts wusste, und vergaß, dass ich es einfach googeln sollte, bevor ich meinen Manager fragte. Schonen Sie diese neuen Leute; Manchmal ist es schwierig herauszufinden, was man googeln soll. Sie wissen nicht, was Sie nicht wissen. Aber jeder wird nach Jahren des Googelns geschickter.
Dagrooms
4

-p|--parentwird verwendet, wenn Sie versuchen, ein Verzeichnis mit top-downAnsatz zu erstellen . Dadurch wird das übergeordnete Verzeichnis, dann das untergeordnete Verzeichnis usw. erstellt, wenn keines vorhanden ist.

-p, --parents kein Fehler, falls vorhanden, übergeordnete Verzeichnisse nach Bedarf erstellen

Darüber rlidwkabedeutet, vollständigen oder administrativen Zugriff zu gewähren. Fand es hier https://itservices.stanford.edu/service/afs/intro/permissions/unix .

Rahul
quelle
3

mkdir [-switch] Ordnername

-p ist ein Schalter, der optional ist. Er erstellt einen Unterordner und einen übergeordneten Ordner, auch wenn der übergeordnete Ordner nicht vorhanden ist.

Von der Manpage:

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

Beispiel:

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

Dadurch werden Unterordnersitzungen, Ansichten und Cache innerhalb des Framework-Ordners erstellt, unabhängig davon, ob 'Framework' früher verfügbar war oder nicht.

Amitesh Bharti
quelle
2

Beachten Sie, dass dies -pein Argument für den mkdirBefehl ist, nicht für Unix. Jeder Befehl kann beliebige Argumente haben.

In diesem Fall bedeutet dies "Eltern", dh es mkdirwerden ein Verzeichnis und alle Eltern erstellt, die noch nicht vorhanden sind.

IMSoP
quelle
2

PFAD: Vor langer Zeit beantwortet, ist es vielleicht hilfreicher, sich -p als "Pfad" vorzustellen (leichter zu merken), da dies dazu führt, dass mkdir jeden Teil des Pfades erstellt, der noch nicht vorhanden ist.

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

Wenn / usr / bin / comm bereits vorhanden ist, verhält es sich wie folgt: mkdir / usr / bin / comm / diff mkdir / usr / bin / comm / diff / er mkdir / usr / bin / comm / diff / er / Zaun

Wie Sie sehen, erspart es Ihnen ein wenig Tippen und Nachdenken, da Sie nicht herausfinden müssen, was bereits vorhanden ist und was nicht.

Fähiger Mac
quelle