option «-p» de mkdir

96

Donc, cela ne me semble pas être une question terriblement compliquée, mais je ne peux pas trouver la réponse. Je ne sais pas ce que fait l' -poption sous Unix. Je l'ai utilisé pour une mission de laboratoire lors de la création d'un sous-répertoire, puis d'un autre sous-répertoire dans celui-ci. Cela ressemblait à ceci:

mkdir -p cmps012m/lab1

Ceci est dans un répertoire privé avec des droits normaux ( rlidwka). Oh, et quelqu'un voudrait-il donner une petite explication de ce que rlidwkasignifie? Je ne suis pas totalement fan d'Unix, mais je ne sais pas vraiment ce que cela signifie. J'espère que ce n'est pas une question trop vague.

utilisateur3476866
la source
2
man mkdirrépondra à votre question. Quant à "rlidwka", je n'en ai aucune idée; vous devrez nous donner un peu plus de contexte.
Keith Thompson

Réponses:

138

Les pages de manuel sont la meilleure source d'informations que vous puissiez trouver ... et sont à portée de main: man mkdirdonne ceci à propos de -pswitch:

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

Exemple de cas d'utilisation: Supposons que je souhaite créer des répertoires hello/goodbyemais qu'il n'en existe aucun:

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

-pcréé les deux, helloetgoodbye

Cela signifie que la commande créera tous les répertoires nécessaires pour répondre à votre demande, sans renvoyer aucune erreur au cas où ce répertoire existe .

A propos rlidwka, Google a une très bonne mémoire pour les acronymes :). Ma recherche a renvoyé ceci par exemple: 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. 

Par conséquent, cela rlidwkasignifie: Toutes les autorisations sur .

Il convient de mentionner, comme @KeithThompson l'a souligné dans les commentaires, que tous les systèmes Unix ne prennent pas en charge l'ACL. Donc probablement le rlidwkaconcept ne s'applique pas ici.

Paulo Bu
la source
1
Mais tous les systèmes de type Unix ne prennent pas en charge les ACL, cela rlidwkapeut être significatif ou non.
Keith Thompson
1
@KeithThompson Eh bien, je suis d'accord, je voulais juste mentionner ce que signifie l'acronyme.
Paulo Bu
1
Oui, mais il est souvent moins utile de répondre à la question de quelqu'un que de fournir des informations de base nécessaires pour comprendre la réponse.
Keith Thompson
1
Je le soulignerai dans la réponse. Je n'étais tout simplement pas au courant de cela. Merci de m'avoir corrigé.
Paulo Bu
4
Cette réponse est la manière la plus verbeuse possible de dire "RTFM, laissez-moi chercher sur Google" et j'adore ça. Une fois, j'ai été un stagiaire noobie qui ne savait rien, et j'ai oublié qu'avant de demander à mon responsable, je devrais simplement le rechercher sur Google. Allez-y doucement avec ces nouveaux gars; il est parfois difficile de savoir quoi chercher sur Google. Vous ne savez pas ce que vous ne savez pas. Mais tout le monde devient plus habile à googler après des années à le faire.
Dagrooms
4

-p|--parentsera utilisé si vous essayez de créer un répertoire avec top-downapproche. Cela créera le répertoire parent puis enfant et ainsi de suite ssil n'en existe pas.

-p, --parents pas d'erreur s'il existe, créer des répertoires parents si nécessaire

À propos de rlidwkacela signifie donner un accès complet ou administratif. Trouvez-le ici https://itservices.stanford.edu/service/afs/intro/permissions/unix .

Rahul
la source
3

mkdir [-switch] nomdossier

-p est un commutateur qui est facultatif, il créera un sous-dossier et un dossier parent, même si le dossier parent n'existe pas.

Depuis la page de manuel:

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

Exemple:

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

Cela créera des sessions de sous-dossiers, des vues, un cache à l'intérieur du dossier du framework indépendamment du «framework» était disponible plus tôt ou non.

Amitesh Bharti
la source
2

Notez qu'il -ps'agit d'un argument mkdirspécifique à la commande, pas à l'ensemble d'Unix. Chaque commande peut avoir les arguments dont elle a besoin.

Dans ce cas, cela signifie "parents", ce mkdirqui signifie que vous créerez un répertoire et tous les parents qui n'existent pas déjà.

IMSoP
la source
2

PATH: Répondu il y a longtemps, cependant, il peut être plus utile de penser à -p comme "Path" (plus facile à retenir), car dans ce cas, mkdir crée chaque partie du chemin qui n'est pas déjà là.

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

si / usr / bin / comm existe déjà, il agit comme: mkdir / usr / bin / comm / diff mkdir / usr / bin / comm / diff / er mkdir / usr / bin / comm / diff / er / fence

Comme vous pouvez le voir, cela vous évite de taper un peu et de réfléchir, car vous n'avez pas à comprendre ce qui est déjà là et ce qui ne l'est pas.

Capable Mac
la source