opzione "-p" di mkdir


96

Quindi questa non mi sembra una domanda terribilmente complicata, ma non riesco a trovare la risposta. Sono confuso su cosa fa l' -popzione in Unix. L'ho usato per un compito in laboratorio mentre creavo una sottodirectory e poi un'altra sottodirectory all'interno di quella. Sembrava così:

mkdir -p cmps012m/lab1

Si trova in una directory privata con diritti normali ( rlidwka). Oh, ea qualcuno dispiacerebbe dare una piccola spiegazione di cosa rlidwkasignifica? Non sono un noob totale per Unix, ma non ho molta familiarità con ciò che questo significa. Si spera che non sia una domanda troppo vaga.


2
man mkdirrisponderà alla tua domanda. Quanto a "rlidwka", non ne ho idea; dovrai fornirci un po 'più di contesto.
Keith Thompson

Risposte:


138

Le pagine man sono la migliore fonte di informazioni che puoi trovare ... ed è a portata di mano: man mkdirproduce questo su -pswitch:

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

Esempio di caso d'uso: si supponga di voler creare directory hello/goodbyema non ne esistono:

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

-pha creato entrambi, helloegoodbye

Ciò significa che il comando creerà tutte le directory necessarie per soddisfare la tua richiesta, non restituendo alcun errore nel caso in cui quella directory esista .

A proposito rlidwka, Google ha un'ottima memoria per gli acronimi :). La mia ricerca ha restituito questo, ad esempio: 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. 

Quindi rlidwkasignifica: tutte le autorizzazioni su .

Vale la pena ricordare, come ha sottolineato @KeithThompson nei commenti, che non tutti i sistemi Unix supportano ACL. Quindi probabilmente il rlidwkaconcetto non si applica qui.


1
Ma non tutti i sistemi Unix supportano gli ACL, quindi rlidwkapuò o non può essere significativo.
Keith Thompson

1
@ KeithThompson Beh, sono d'accordo, volevo solo menzionare il significato dell'acronimo.
Paulo Bu

1
Sì, ma spesso rispondere alla domanda di qualcuno è meno utile che fornire le informazioni di base necessarie per comprendere la risposta.
Keith Thompson

1
Lo sottolineerò nella risposta. Semplicemente non ne ero consapevole. Grazie per avermi corretto.
Paulo Bu

4
Questa risposta è il modo più prolisso possibile per dire "RTFM, fammelo cercare su Google" e lo adoro. Una volta ero uno stagista noobie che non sapeva nulla e ho dimenticato che prima di chiedere al mio manager avrei dovuto cercarlo su google. Vacci piano con questi nuovi ragazzi; a volte è difficile capire cosa cercare su Google. Non sai cosa non sai. Ma tutti diventano più abili nel cercare su Google dopo anni passati.
Dagrooms

4

-p|--parentverrà utilizzato se stai cercando di creare una directory con l' top-downapproccio. Ciò creerà la directory genitore, quindi il figlio e così via se e non esiste.

-p, --parents nessun errore se esistente, crea le directory genitore secondo necessità

Riguardo a rlidwkaciò significa dare accesso completo o amministrativo. L'ho trovato qui https://itservices.stanford.edu/service/afs/intro/permissions/unix .


3

mkdir [-switch] nomecartella

-p è un interruttore che è opzionale, creerà anche una sottocartella e una cartella principale e anche la cartella principale non esiste.

Dalla pagina man:

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

Esempio:

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

Questo creerà sessioni di sottocartelle, viste, cache all'interno della cartella del framework indipendentemente dal fatto che "framework" fosse disponibile in precedenza o meno.


2

Notare che -pè un argomento mkdirspecifico per il comando, non per l'intero Unix. Ogni comando può avere qualsiasi argomento di cui ha bisogno.

In questo caso significa "genitori", il che significa mkdirche creerà una directory e tutti i genitori che non esistono già.


2

PATH: Risposta molto tempo fa, tuttavia, forse è più utile pensare a -p come "Path" (più facile da ricordare), poiché in questo modo mkdir crea ogni parte del percorso che non è già presente.

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

se / usr / bin / comm esiste già, si comporta come: mkdir / usr / bin / comm / diff mkdir / usr / bin / comm / diff / er mkdir / usr / bin / comm / diff / er / fence

Come puoi vedere, ti fa risparmiare un po 'di digitazione e di pensiero, dal momento che non devi capire cosa c'è già e cosa no.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.