Hoy una entrada rápida con un pequeño «truco» para extraer únicamente un archivo de un ZIP que contiene varios directorios y archivos. En primer lugar visualizamos el contenido del zip:
$ unzip -l test.zip
Archive: test.zip
Length Date Time Name
--------- ---------- ----- ----
0 2016-06-05 21:41 test/
0 2016-06-05 21:41 test/foo/
0 2016-06-05 21:41 test/foo/bar/
0 2016-06-05 21:41 test/foo/bar/test3.txt
0 2016-06-05 21:41 test/foo/bar/test2.txt
0 2016-06-05 21:41 test/foo/bar/test1.txt
--------- -------
0 6 files
Una vez localizado el archivo, simplemente pasamos como parámetro la ruta interna del archivo dentro del zip y después la ruta en la que lo queremos desempaquetar:
$ unzip -j test.zip "test/foo/bar/test2.txt" -d . Archive: test.zip extracting: ./test2.txt
Si no queremos crear la estructura de directorios sino únicamente extraer el archivo utilizamos -j, si quitamos este parámetro se crearán los directorios «test/foo/bar» a partir de la ruta que indiquemos:
$ unzip test.zip "test/foo/bar/test2.txt" -d . Archive: test.zip extracting: ./test/foo/bar/test2.txt $ pwd /tmp $ ls -l /tmp/test/foo/bar/test2.txt -rw-rw-r-- 1 foo foo 0 Jun 5 21:41 /tmp/test/foo/bar/test2.txt