desde descomprimir crear consola comando archivo java python linux unix jar

java - descomprimir - ¿Cómo se extrae un JAR en un sistema de archivos UNIX con un solo comando y se especifica su directorio de destino utilizando el comando JAR?



descomprimir jar eclipse (4)

Estoy creando un script de Python en el que estoy ejecutando comandos del sistema UNIX. Tengo un archivo de guerra llamado Binaries.war que está dentro de un archivo ear llamado Portal.ear

El archivo ear de Portal reside en, digamos / home / foo / bar /

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

Extraerá el archivo Binaries.war del archivo /home/foo/bar/Portal.ear en el directorio actual desde el que estoy ejecutando el script.

¿Cómo se especifica que se extraiga un directorio de destino con solo un comando? Me gustaría hacer algo como esto para extraer Binaries.war en el directorio / home / foo / bar / baz

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

Busqué opciones en la página man de JAR y parece que no puedo encontrar una forma sencilla de hacerlo. Por supuesto, puedo extraer el archivo en mi directorio actual y luego moverlo usando mv, pero me gustaría hacerlo de una vez y no mezclar directorios y archivos.


¿No puedes simplemente cambiar el directorio de trabajo dentro del script de python usando os.chdir(target) ? Estoy de acuerdo, no veo ninguna forma de hacerlo desde el comando jar.

Si no desea cambiar permanentemente el directorio, guarde el directorio actual (usando os.getcwd() ) en una variable y vuelva a cambiar posteriormente.


No creo que la herramienta jar lo admita de forma nativa, pero puedes descomprimir un archivo JAR con "descomprimir" y especificar el directorio de salida con la opción "-d", así que algo como:

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


Si se trata de un script personal, en lugar de uno que está planeando distribuir, podría ser más sencillo escribir una función de shell para esto:

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

que luego podrías llamar desde Python:

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

Si realmente te apetece, puedes usar sed para analizar el nombre de archivo de la ruta, para que puedas llamarlo

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

Pero lo dejaré como un ejercicio para el lector.

Por supuesto, como esto extraerá primero el .war en el directorio actual y luego lo moverá, tiene la posibilidad de sobrescribir algo con el mismo nombre donde se encuentre.

Cambiar el directorio, extraerlo y volver a copiarlo es un poco más limpio, pero me encuentro usando pequeñas funciones de shell de una línea como esta todo el tiempo cuando quiero reducir el desorden de código.


Si su archivo jar ya tiene una ruta de acceso absoluta como se muestra, es particularmente fácil:

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

Es decir, tiene el shell ejecutado por el directorio de cambios de Python y luego ejecuta la extracción.

Si su archivo jar todavía no tiene un nombre de ruta absoluto, entonces debe convertir el nombre relativo a absoluto (prefijando con la ruta del directorio actual) para que jar pueda encontrarlo después del cambio de directorio.

Los únicos problemas que quedan por preocuparse son cosas como espacios en blanco en los nombres de ruta.