46 votes

Comment extraire un fichier JAR dans un système de fichiers UNIX avec une seule commande et spécifier son répertoire cible à l'aide de la commande JAR?

Je suis entrain de créer un script Python dans lequel je suis à l'exécution de système UNIX commandes. J'ai un la guerre archive nommée Binaires.la guerre qui est à l'intérieur de l'oreille archive nommée Portail.l'oreille

Le Portail de l'oreille fichier se trouve dans /home/foo/bar/

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

Pour extraire les fichiers Binaires.fichier war de l' /home/foo/bar/Portal.l'oreille de l'archive dans le répertoire courant, je suis en cours d'exécution du script à partir de.

Comment spécifier un répertoire cible pour être extrait à l'aide d'une seule commande? Je voudrais faire quelque chose comme cela pour en extraire les fichiers Binaires.la guerre dans le répertoire /home/foo/bar/baz

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

J'ai cherché sur le POT de la page de manuel pour les options et n'arrive pas à trouver une façon simple de le faire. Bien sûr, je peux extraire l'archive dans mon répertoire courant, puis le déplacer à l'aide de mv mais j'aimerais le faire d'un seul coup et non aléatoire des répertoires et des fichiers.

63voto

Jonathan Leffler Points 299946

Si votre fichier jar a déjà un chemin absolu comme indiqué, il est particulièrement facile:

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

Qui est, vous avez le shell exécuté par Python changer de répertoire pour vous et ensuite exécuter l'extraction.

Si votre fichier jar n'est pas déjà un chemin absolu, alors vous devez convertir le nom relatif à l'absolu (en préfixant avec le chemin d'accès du répertoire courant), de sorte qu' jar pouvez le trouver après le changement de répertoire.

Les seules questions à vous soucier de choses comme des espaces dans les noms de chemin.

60voto

MrWiggles Points 6622

Je ne pense pas que l'outil jar prenne cela en charge de manière native, mais vous pouvez simplement décompresser un fichier JAR avec "unzip" et spécifier le répertoire de sortie avec cela avec l'option "-d".

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

1voto

Nick Fortescue Points 18829

Ne pouvez-vous pas simplement changer le répertoire de travail dans le script python en utilisant os.chdir(target) ? Je suis d'accord, je ne vois aucun moyen de le faire à partir de la commande jar elle-même.

Si vous ne souhaitez pas changer de répertoire de façon permanente, stockez le répertoire actuel (à l'aide de os.getcwd() ) dans une variable et modifiez-le ultérieurement.

1voto

Xiong Chiamiov Points 1734

Si c'est un script personnel, plutôt que celui que vous avez l'intention de distribuer, il pourrait être plus simple à écrire une fonction shell pour cela:

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

qui vous pouvez ensuite appeler à partir de python comme suit:

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

Si vous vous sentez vraiment comme ça, vous pouvez utiliser sed pour analyser le nom de fichier à partir de la voie, de sorte que vous seriez en mesure d'appeler avec des

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

Je vais laisser ça comme un exercice pour le lecteur, cependant.

Bien sûr, puisque cela va extraire les .la guerre dans le répertoire courant en premier, puis le déplacer, il a la possibilité d'écraser quelque chose du même nom où vous êtes.

En changeant le répertoire, l'extraction, et cd-ing arrière est un peu plus propre, mais je me retrouve avec peu d'un interpréteur de ligne de fonctions comme ça tout le temps quand je veux réduire l'encombrement de code.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X