web-dev-qa-db-fra.com

mkdir -p sur Mac

J'ai lu la description de la page de manuel OSX. Il a la description comme suit concernant mkdir -p:

-p

Créez des répertoires intermédiaires selon vos besoins. Si cette option n'est pas spécifiée, le préfixe de chemin complet de chaque opérande doit déjà exister. D'autre part, avec cette option spécifiée, aucune erreur ne sera signalée si un répertoire donné en tant qu'opérande existe déjà. Les répertoires intermédiaires sont créés avec les bits d'autorisation rwxrwxrwx (0777) modifiés par l'umask actuel, ainsi que les autorisations d'écriture et de recherche du propriétaire.

Je ne suis pas tout à fait à la suite de cette description. particulièrement "Si cette option n'est pas spécifiée, le préfixe de chemin complet de chaque opérande doit déjà exister. D'autre part, avec cette option spécifiée, aucune erreur ne sera signalée si un répertoire donné en tant qu'opérande existe déjà."

Quelqu'un a-t-il un exemple concernant cette explication?

11
user454083

Étant donné cette structure de répertoire:

/
  foo/
  bar/
    baz/

Cela fonctionnera évidemment:

mkdir /foo/x

Ceci fonctionnera pas:

mkdir /foo/x/y

Étant donné que /foo/x n'existe pas, le répertoire /foo/x/y ne peut pas être créé en dessous. Le préfixe/foo/x/ doit exister pour créer /foo/x/y.

C'est ici que -p entre en jeu. Cela fonctionne:

mkdir -p /foo/x/y

/foo/x sera implicitement créé avec /foo/x/y.

Si tu essayes:

mkdir /bar/baz

Vous obtiendrez une erreur indiquant que le répertoire existe déjà. Cependant, si vous le faites:

mkdir -p /bar/baz

vous n'obtiendrez pas d'erreur, il ignorera simplement tous les répertoires existants et se contentera du résultat sans rien faire.

24
deceze

Imaginez que vous avez un dossier vide et que vous voulez créer un sous-répertoire appelé "d1" et un sous-répertoire à l'intérieur de "d1" appelé "d2". Normalement, vous devez faire ceci:

mkdir d1
mkdir d1/d2

Avec l'option "-p", vous pouvez demander à mkdir de créer le répertoire intermédiaire (d1) pour vous:

mkdir -p d1/d2

Le bit que vous demandez concerne le fait que si "d1" existe déjà et que vous utilisez "mkdir -p", peu importe qu'il soit déjà présent et qu'il n'y ait aucun message d'erreur.

2
Mark Setchell

Ce travail sur la version 10.10.4

mkdir -pv d1/d/d3 
1
Luis Rodriguez

Vous ne savez pas si c'est seulement Mac, mais sur Mac OS X, vous pouvez le faire.

mkdir -p src/{main,test}/{Java,resources,scala}

qui vous donnera non seulement un produit imbriqué, mais aussi cartésien de vos annuaires:

src/test/Java
src/test/resources
src/test/scala
src/main/Java
src/main/resources
src/main/scala
0
dr jerry