2010-01-21 6 views
11

Gibt es eine Möglichkeit, "install" für die Installation mehrerer Dateien auf einmal mit einem "Wildcard" -Muster zu verwenden (und immer noch "installieren" die führende Verzeichnishierarchie erstellen)?Linux "install" -Befehl für Wildcard-Installation

Ich habe versucht, verschiedene Möglichkeiten:

  • install -D -t /dest/path /source/path/*.py
  • install -D -t /dest/path/ /source/path/*.py
  • install -D /source/path/*.py /dest/path
  • install -D /source/path/*.py /dest/path/

Bitte helfen ... für jeden Versuch es eine Menge nimmt Zeit (Ich verwende pbuilder, um mein Paket zu testen jedes Mal).

Antwort

7

Verwenden Sie möglicherweise eine einfache äußere for-Schleife um den Installationsanruf? So wie etwa

for f in /source/path/*.py; do \ 
    install -D -t /dest/path $$f; \ 
done 

Das heißt, können Sie immer nehmen die Logik aus Ihrem Makefile, debian/rules-Datei, ... und testen Sie es Standalone ohne pbuilder laufen zu müssen.

Sonst natürlich Requisiten für die Verwendung pbuilder für interne Projekte!

+0

+1: Danke. Ich könnte natürlich Ihre Technik verwenden, aber ich habe gerade durch wiederholtes Versuch & Fehler eine funktionierende Lösung gefunden. Prost. – jldupont

+0

@Dirk: Ich werde Ihre Antwort akzeptieren, obwohl ich für eine direktere Lösung IMO ging. Aber hey, es gibt viele Möglichkeiten, das zu tun. Prost. – jldupont

+0

Ja, deine Antwort ist auch ziemlich gut. Erstellen Sie tatsächlich .deb-Pakete? In diesem Fall ist dh_installdirs superleicht. Listen Sie einfach auf, welche Verzeichnisse Sie benötigen und Sie sind fertig. Debhelper hat viele nützliche Werkzeuge. –

17

Verwenden Sie das folgende die Verzeichnishierarchie zu erstellen, vor der Installation:

install -d /dest/path 

und dann verwenden:

install -D /source/path/*.py /dest/path 

zu "installieren", um alle Dateien.

+0

Ist nicht der ganze Punkt des '-D' Flags, um die führenden übergeordneten Verzeichnisse des Zielpfads zu erstellen? Wenn sie bereits mit einem vorherigen 'install'-Aufruf erstellt wurden, scheint es unnötig, sie im späteren Befehl zu verwenden. Kannst du seine Verwendung rechtfertigen oder ist es sicher anzunehmen, dass sie in diesem Fall entfernt werden kann? –

1

man install zeigt, dass das DEST vorhanden sein muss, wenn mehrere Dateien kopiert werden.

... In den ersten drei Formen, kopieren Sie SOURCE auf DEST oder mehrere QUELLE (en) auf das vorhandene Verzeichnis, während die Zugriffsrechte und Eigentümer/Gruppe. In der vierten Form, erstellen Sie alle Komponenten des angegebenen VERZEICHNIS (s). ...

+1

... danke Ich habe bereits die "man" -Datei gelesen ... – jldupont

4

Ich weiß nichts über pbuilder, aber für meinen Fall (PKGBUILD für Arch Linux) Ich bin ein BASH for-Schleife mit FIND:

for file in $(find source -type f -name *.py); do 
    install -m 644 -D ${file} dest/${file#source/} 
done 

Der Befehl finden geeignet sein, zu schmecken, um mehr oder weniger spezifisch darüber zu sein, was kopiert wird. Im obigen Beispiel würden alle regulären Dateien ausgewählt, die mit .py irgendwo unterhalb von source/enden.

+0

Dies ist der beste Weg, es zu tun, wenn Sie das Äquivalent von 'cp ​​-r ...' mit installieren möchten. Wenn Sie nur die gesamte Quellverzeichnisstruktur kopieren möchten (anstatt nur * .py zu erhalten), lassen Sie einfach '-name * .py' weg. –

0

Okay, vielleicht revive ich einen alten Post, aber ich denke, es lohnt sich für zukünftige Forschung. Aus dem Beispiel von nharward (ich benutze auch arch linux und PKGBUILD) habe ich modifiziert, so dass ich mich unabhängig von der Verzeichnisstruktur nicht um den Modus/Berechtigungen (-m) der Datei kümmern musste.