Drapeau GNU «install» -d - comment ça marche?

26

J'essaie d'écrire une règle de makefile pour copier un répertoire, en conservant sa structure, et puisque toutes les autres règles de nos makefiles utilisent install, je voulais être cohérent.

Dans la page de manuel, il est écrit:

SYNOPSIS

   install [OPTION]... [-T] SOURCE DEST
   install [OPTION]... SOURCE... DIRECTORY
   install [OPTION]... -t DIRECTORY SOURCE...
   install [OPTION]... -d DIRECTORY...

   -d, --directory
          treat all arguments as directory names; create all components of
          the specified directories

OK, cela ressemble à ce dont j'ai besoin ... mais les drapeaux n'ont pas de sens. Comment spécifiez-vous le répertoire de destination pour l'installation?

J'ai essayé de faire un test de base en créant une structure de répertoires arbitraire sur mon disque dur local:

~>tree test
test
├── a
│   └── b
│       └── c
│           └── e.txt
└── d

4 directories, 1 file

Et puis courir install -det regarder ce qui a été créé:

~>install -d test test2
~>tree test2
test2

0 directories, 0 files

Rien ne s'est passé!

Est-ce que quelqu'un peut-il me montrer la bonne direction? Googler "gnu install -d flag" ne m'apporte pas grand chose.

ashgromnies
la source

Réponses:

18

Il semble que la install -Dcommande soit en fait ce que je veux.

Page de manuel:

-D créer tous les principaux composants de DEST sauf le dernier, puis copier SOURCE dans DEST

Fonctionne très bien, sauf que vous devez spécifier chaque fichier individuellement.

ashgromnies
la source
8
J'étais excité jusqu'à la fin, "vous devez spécifier chaque fichier individuellement". Je suppose que je m'en cp -r
tiendrai
7
La commande install a-t-elle un équivalent à cp -r?
Alexander
14

install -dest juste utilisé pour créer des répertoires. Vous lui avez dit de créer deux répertoires, testet test2. testexistait déjà, il ne lui restait plus qu'à faire test2. Je ne pense pas qu'il installsupporte la copie d'arborescences de répertoires entières; il est normalement utilisé sur les fichiers. Vous devez probablement utilisercp

Michael Mrozek
la source
2
Fondamentalement, install -dc'est la même chose, mkdirsauf que vous pouvez spécifier le mode, le propriétaire, le contexte SELinux et le groupe à la fois.
ZiggyTheHamster
0

Habituellement, ce que vous voulez, c'est installer les fichiers dans le bon dossier, sans vous répéter. Vous pouvez utiliser la recherche et l'installation pour aider à garder vos scripts d'installation plus SEC

find SOURCE/ -type f -exec install -vDm 755 {} THERE/{} \;
geckos
la source