Wie extrahieren Sie eine JAR in einem UNIX-Dateisystem mit einem einzigen Befehl und geben ihr Zielverzeichnis mit dem Befehl JAR an?

Kriegsarchiv mit dem Namen Binaries.war, das sich in einem Ohrarchiv namens Portal.ear

befindet, befindet sich die Portal-Ohrdatei, sagen wir /home/foo/bar/

jar xf /home/foo/bar/Portal.ear Binaries.war

Wird die Datei Binaries.war aus dem Archiv /home/foo/bar/Portal.ear in das aktuelle Verzeichnis extrahieren, aus dem ich das Skript führe.

Wie geben Sie ein Zielverzeichnis an, das extrahiert werden soll, um nur einen Befehl zu verwenden?

Ich erstelle ein Python-Skript, in dem ich UNIX-Systembefehle auslühre. ich habe eine Ich möchte so etwas tun, um Binaries.war in das Verzeichnis /home/foo/bar/baz

jar xf /home/foo/bar/Portal.ear Binaries.war [into target directory /home/foo/bar/baz]

zu extrahieren. Natürlich kann ich das Archiv in mein aktuelles Verzeichnis extrahieren und es dann mit mv verschieben, aber ich möchte dies in einer Aufnahme tun und verzeichnisse und Dateien nicht ummischen.

Antwort auf "Wie extrahieren Sie eine JAR in einem UNIX-Dateisystem mit einem einzigen Befehl und geben ihr Zielverzeichnis mit dem Befehl JAR an? " 4 von antworten

Ich glaube nicht, dass das jar-Tool dies nativ unterstützt, aber Sie können einfach eine JAR-Datei mit "unzip" entpacken und das Ausgabeverzeichnis mit der Option "-d" angeben, also so etwas wie:

$ unzip -d /home/foo/bar/baz /home/foo/bar/Portal.ear Binaries.war

Können Sie nicht einfach das Arbeitsverzeichnis innerhalb des Python-Skripts mit os.chdir(target) ? I agree, I can't see any way of doing it from the jar command itself. ändern? Ich stimme zu, ich sehe keine Möglichkeit, es vom Jar-Befehl selbst zu tun.

Wenn Sie das Verzeichnis nicht dauerhaft ändern möchten, speichern Sie das aktuelle Verzeichnis (mit os.getcwd())in a variable and change back afterwards. ) in einer Variablen und wechseln Sie danach wieder.

Wenn Ihre JAR-Datei bereits einen absoluten Pfadnamen hat, wie gezeigt, ist es besonders einfach:

cd /where/you/want/it; jar xf /path/to/jarfile.jar

Das heißt, Sie haben die Shell vom Python-Änderungsverzeichnis für Sie ausgeführt und führen dann die Extraktion aus.

Wenn Ihre JAR-Datei noch keinen absoluten Pfadnamen hat, müssen Sie den relativen Namen in absolut konvertieren (indem Sie ihn dem Pfad des aktuellen Verzeichnisses voranstellen), damit jar can find it after the change of directory. ihn nach der Verzeichnisänderung finden kann.

Die einzigen Probleme, über die man sich Sorgen machen muss, sind Dinge wie Leerzeichen in den Pfadnamen.

Wenn es sich um ein persönliches Skript handelt, anstatt eines, das Sie verteilen möchten, ist es möglicherweise einfacher, eine Shell-Funktion dafür zu schreiben:

function warextract { jar xf $1 $2 && mv $2 $3 }

, die Sie dann von Python so aufrufen könnten:

warextract /home/foo/bar/Portal.ear Binaries.war /home/foo/bar/baz/

Wenn Sie wirklich Lust dazu haben, könnten Sie sed verwenden, um den Dateinamen aus dem Pfad zu analysieren, so dass Sie ihn mit

warextract /home/foo/bar/Portal.ear /home/foo/bar/baz/Binaries.war

anrufen können. Obwohl.

Natürlich, da dies die .war zuerst in das aktuelle Verzeichnis extrahieren und dann verschieben wird, hat es die Möglichkeit, etwas mit dem gleichen Namen zu überschreiben, wo Sie sind.

Verzeichnis ändern, extrahieren und zurück cd-ing ist ein bisschen sauberer, aber ich finde mich mit kleinen einzeiligen Shell-Funktionen wie dieser die ganze Zeit, wenn ich Code-Unordnung reduzieren möchte.