2011-08-20 13 views
15

Cualquier ideas sobre cómo descomprimir un archivo zip entubada como esto:Bash - cómo descomprimir un archivo zip por tubería (de "wget ​​-qO-")

wget -qO- http://downloads.wordpress.org/plugin/akismet.2.5.3.zip 

deseé para descomprimir el archivo en un directorio , al igual que solía hacer con un archivo normal:

wget -qO- http://downloads.wordpress.org/plugin/akismet.2.5.3.zip | unzip -d ~/Desktop 
+0

Mientras que la pregunta es válida, si está utilizando git para trabajar con WordPress, ahora hay un espejo Git de cada uno de ellos. Ignora mi comentario si no es tu caso :) De lo contrario, ahórrate los problemas de averiguar cómo usar una ruta para automatizar tu instalación y ve a usar el submódulo/Compositor de Git usando https://github.com/wp-plugins – renoirb

Respuesta

6

wget -qO- -O tmp.zip http://downloads.wordpress.org/plugin/akismet.2.5.3.zip && unzip tmp.zip && rm tmp.zip

+2

El uso de && es mejor una vez que el siguiente comando solo se inicia si el anterior finalizó correctamente. Gracias – Roger

+1

Esto no está extrayendo de zip de una manera entonada. Con su propuesta, necesita usar más espacio en disco y agotarlo (importante en SSD si los archivos son grandes). También es más eficiente para paralelizar directamente la descarga y la extracción. –

3

me gustaría echar un vistazo a funzip (http://www.info-zip.org/mans/funzip.html). La página del manual para que las notas,

...filter for extracting from a ZIP archive in a pipe 

Lo siento, no tengo un ejemplo, pero parece que viene con la utilidad de descompresión Linux.

+1

Solo descarga el PRIMER ARCHIVO. funzip sin un argumento de archivo actúa como un filtro; es decir, asume que un archivo ZIP (o un archivo gzip'd (1)) se canaliza a la entrada estándar, y extrae ** el primer miembro ** del archivo en stdout. –

6

Mientras que el siguiente no funcionará en bash, que funcionará en zsh. Dado que muchos usuarios zsh pueden terminar aquí, todavía puede ser útil: formato de archivo

unzip =(wget -qO- http://downloads.wordpress.org/plugin/akismet.2.5.3.zip) 
+1

Tenga en cuenta que de todos modos descargará el archivo completo antes de ejecutar descomprimir, que no es la pregunta original. –

+1

Es cierto.Desafortunadamente, el formato de archivo zip pone su "directorio central" al final del archivo, y el algoritmo de descompresión primero lee ese directorio antes de procesar los archivos. Por lo tanto, una verdadera solución de tuberías que se desabroche correctamente no es realmente una posibilidad. (Esto también es un problema para las aplicaciones web que desean procesar grandes archivos zip cargados; no se puede hacer de forma continua). –

+1

Si bien es cierto que hay un índice al final del archivo que contiene información "autorizada" en el cual los archivos han sido eliminados del archivo (sin la necesidad de regenerarlo en cada eliminación), puedo extraer con éxito un ZIP simple de una manera segmentada con bsdtar, porque de hecho hay encabezados antes de cada archivo. bsdtar probablemente daría malos resultados en caso de que el archivo haya sido modificado (aparecerán archivos "fantasmas", ya que hasta el final del archivo no se conocen cuáles son las versiones más recientes). –

19

La postal incluye un directorio (índice) al final del archivo. Este directorio indica dónde, dentro del archivo se encuentra cada archivo y, por lo tanto, permite un acceso rápido y aleatorio, sin leer todo el archivo.

Esto parece plantear un problema al intentar leer un archivo ZIP a través de un conducto, en el que no se accede al índice hasta el final y los miembros individuales no se pueden extraer correctamente hasta que el archivo se haya leído completamente y ya no está disponible. Como tal, parece poco sorprendente que la mayoría de los descompresores ZIP simplemente fallen cuando el archivo se suministra a través de una tubería.

El directorio al final del archivo no es ubicación donde la meta información del archivo se almacena en el archivo. Además, las entradas individuales también incluyen esta información en un encabezado de archivo local, para fines de redundancia.

Aunque no todos los descompresor ZIP utilizar cabeceras de los archivos locales cuando el índice no está disponible, el alquitrán y el frente cpio extremos para libarchive (también conocido como bsdtar y bsdcpio) puede hacer y hará por lo que cuando la lectura a través de una tubería, lo que significa que la lo que sigue es posible:

wget -qO- http://downloads.wordpress.org/plugin/akismet.2.5.3.zip | bsdtar -xvf- -C ~/Desktop 
0

sólo tiene que utilizar zcat

wget -qO- http://downloads.wordpress.org/plugin/akismet.2.5.3.zip | zcat >> myfile.txt 
+0

Esto es un O <- Recuerde – SepGuest

Cuestiones relacionadas