cristobal tokar
Estoy creando un script de Python dentro del cual estoy ejecutando comandos del sistema UNIX. Tengo un archivo de guerra llamado Binaries.war que está dentro de un archivo de oído llamado Portal.ear
El archivo ear del Portal reside en, por ejemplo, /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 especifica un directorio de destino para extraerlo usando 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 de manual de JAR y parece que no puedo encontrar una manera simple de hacer esto. Por supuesto, puedo extraer el archivo a mi directorio actual y luego moverlo usando mv, pero me gustaría hacerlo de una sola vez y no mezclar directorios y archivos.
Si su archivo jar ya tiene un nombre de ruta absoluto 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 cambio de Python para usted y luego ejecuta la extracción.
Si su archivo jar aún no tiene una ruta de acceso absoluta, entonces debe convertir el nombre relativo en absoluto (con el prefijo de la ruta del directorio actual) para que jar
puede encontrarlo después del cambio de directorio.
Los únicos problemas por los que debe preocuparse son cosas como los espacios en blanco en los nombres de las rutas.
-
Esta es la forma de hacerlo. También puede crear el directorio primero si no existe.
– nos
3 de julio de 2009 a las 15:17
-
Ejecute “mkdir -p /where/you/want/it” antes del comando ‘cd’ – sí, ciertamente podría hacerlo.
–Jonathan Leffler
3 de julio de 2009 a las 15:44
-
En caso de que alguno de ustedes esté preocupado, este
jar xf
método deja intacto el frasco original.–Cale Sweeney
11 de abril de 2017 a las 0:30
mono
No creo que la herramienta jar admita esto de forma nativa, pero puede 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
-
Sí, los .jars son solo .zips con una extensión diferente. Cuando faltan las herramientas “jar”, hay muchas herramientas que se ocupan de las cremalleras que pueden hacer casi cualquier cosa bajo el sol (ja, ja, mal juego de palabras)
– zenazn
3 de julio de 2009 a las 15:02
-
Esto funcionaría, pero el archivo Portal.ear es enorme y tardaría demasiado. Solo quiero extraer el archivo Binaries.war de Portal.ear. Debe haber una manera de hacerlo usando descomprimir.
– Christopher Tokar
3 de julio de 2009 a las 15:36
-
$ hombre descomprimir !! He modificado la pregunta para incluir solo el archivo Binaries.war
– tddmonkey
3 de julio de 2009 a las 15:56
-
Confirmo que esta forma es más sencilla de lo que he visto nunca. De hecho, jar es una especie de archivo de logros.
– Tung
19 de noviembre de 2015 a las 10:59
¿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, almacene el directorio actual (usando os.getcwd()
) en una variable y volver a cambiar después.
Si se trata de un script personal, en lugar de uno que planea 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ía llamar desde python así:
warextract /home/foo/bar/Portal.ear Binaries.war /home/foo/bar/baz/
Si realmente lo desea, puede usar sed para analizar el nombre del archivo de la ruta, de modo que pueda llamarlo con
warextract /home/foo/bar/Portal.ear /home/foo/bar/baz/Binaries.war
Sin embargo, dejaré eso como un ejercicio para el lector.
Por supuesto, dado que esto extraerá primero el .war al directorio actual y luego lo moverá, tiene la posibilidad de sobrescribir algo con el mismo nombre donde se encuentra.
Cambiar el directorio, extraerlo y volver a grabar un CD 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 del código.