web-dev-qa-db-fra.com

L'option "-p" de mkdir

Donc, cela ne semble pas être une question extrêmement compliquée, mais c’est une question à laquelle je ne trouve pas de réponse. Je ne comprends pas ce que l'option -p fait sous Unix. Je l'ai utilisé pour une tâche de laboratoire lors de la création d'un sous-répertoire, puis d'un autre sous-répertoire au sein de celui-ci. Cela ressemblait à ceci:

mkdir -p cmps012m/lab1

C'est dans un répertoire privé avec les droits normaux (rlidwka). Oh, cela vous dérangerait-il de donner une petite explication de ce que rlidwka signifie? Je ne suis pas un vrai partisan d'Unix, mais je ne connais pas vraiment ce que cela signifie. Espérons que ce n'est pas une question trop vague.

82
user3476866

La page de manuel est la meilleure source d’information que vous puissiez trouver ... et est à portée de main: man mkdir donne ceci à propos de -p switch:

-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/goodbye mais qu'il n'en existe aucun:

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

-p a créé à la fois hello et goodbye

Cela signifie que la commande créera tous les répertoires nécessaires pour répondre à votre demande, sans renvoyer d'erreur si ce répertoire existe .

À propos de 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. 

Donc rlidwka signifie: Toutes les autorisations sur .

Comme @KeithThompson l'a fait remarquer dans les commentaires, il convient de noter que tous les systèmes Unix ne prennent pas en charge ACL. Donc, probablement le concept rlidwka ne s'applique pas ici.

118
Paulo Bu

-p|--parent sera utilisé si vous essayez de créer un répertoire avec l'approche top-down. Cela créera le répertoire parent, puis enfant, et ainsi de suite, à condition qu'il n'en existe aucun.

-p, --parents pas d'erreur s'il existe, crée les répertoires parents au besoin

À propos de rlidwka cela signifie donner un accès complet ou un accès administratif. Je l'ai trouvée ici https://itservices.stanford.edu/service/afs/intro/permissions/unix .

4
Rahul

mkdir [-switch] nomutilisateur

-p est un commutateur facultatif. Il crée un sous-dossier et un dossier parent. Même le dossier parent n'existe pas.

De 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, la mise en cache dans le dossier de la structure, indépendamment de la disponibilité préalable de la "structure".

3
Amitesh

Notez que -p est un argument de la commande mkdir spécifiquement, et non de la totalité de Unix. Chaque commande peut avoir tous les arguments nécessaires.

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

2
IMSoP

PATH: Répondu il y a longtemps, cependant, il serait peut-être plus utile de considérer -p comme "Path" (plus facile à retenir), car mkdir crée toutes les parties du chemin qui ne sont pas déjà présentes.

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

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

Comme vous pouvez le constater, cela vous évite un peu de dactylographie et de réflexion, car vous n'avez pas à déterminer ce qui existe déjà et ce qui ne l'est pas.

1
Able Mac