GNU "install" -d flag - wie geht das?

26

Ich versuche, eine Makefile-Regel zu schreiben, um ein Verzeichnis zu kopieren, wobei die Struktur beibehalten wird, und da alle anderen Regeln in unseren Makefiles verwendet werden install, wollte ich konsistent sein.

In der Manpage heißt es:

ZUSAMMENFASSUNG

   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, das hört sich nach dem an, was ich brauche ... aber die Fahnen ergeben keinen Sinn. Wie geben Sie das Zielverzeichnis an, in das installiert werden soll?

Ich habe versucht, einen Basistest durchzuführen, indem ich eine beliebige Verzeichnisstruktur auf meiner lokalen Festplatte erstellt habe:

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

4 directories, 1 file

Und dann rennen install -dund schauen, was erstellt wurde:

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

0 directories, 0 files

Nichts ist passiert!

Kann mich jemand in die richtige Richtung weisen? Das googeln mit "gnu install -d flag" bringt mir nicht viel.

ashgromnies
quelle

Antworten:

18

Es sieht so aus, als ob der install -DBefehl genau das ist, was ich will.

Manpage:

-D Erstellt alle führenden Komponenten von DEST mit Ausnahme der letzten und kopiert dann SOURCE nach DEST

Funktioniert hervorragend, außer dass Sie jede Datei einzeln angeben müssen.

ashgromnies
quelle
8
Ich war bis zum Schluss gespannt, "man muss jede Datei einzeln angeben". Ich cp -r
schätze,
7
Entspricht der Installationsbefehl cp -r?
Alexander
14

install -dwird nur zum Erstellen von Verzeichnissen verwendet. Sie haben gesagt, es sollen zwei Verzeichnisse erstellt werden, testund test2. testexistierte bereits, so dass alles, was es zu tun brauchte, zu machen war test2. Ich glaube nicht, dass installdas Kopieren ganzer Verzeichnisbäume unterstützt wird. Es wird normalerweise für Dateien verwendet. Sie müssen wahrscheinlich verwendencp

Michael Mrozek
quelle
2
Grundsätzlich install -dist es dasselbe, mkdiraußer dass Sie den Modus, den Eigentümer, den SELinux-Kontext und die Gruppe gleichzeitig angeben können.
ZiggyTheHamster
0

Normalerweise möchten Sie Dateien im richtigen Ordner installieren, ohne sich selbst zu wiederholen. Sie können find and install verwenden, um Ihre Installationsskripte trockener zu halten

find SOURCE/ -type f -exec install -vDm 755 {} THERE/{} \;
Geckos
quelle