¿Cómo extraer solo una carpeta específica de un archivo comprimido en un directorio dado?

59

¿Cómo se extrae una carpeta específica de un archivo comprimido a un directorio dado?

Traté de usar

unzip "/path/to/archive.zip" "in/archive/folder/" -d "/path/to/unzip/to"

pero eso solo crea la carpeta en la ruta en la que quiero descomprimir y no hace nada más.

Enkouyami
fuente

Respuestas:

60
unzip <target-zip-file> '<folder-to-extract/*>' -d <destination-path> 

funciona bien en EL 6

demandar
fuente
3
¿Qué es este EL 6?
Zelda
2
Enterprise Linux 6 (RHEL6) - Red Hat.
slm
Esto también funciona; es básicamente la misma respuesta que Mark Adler, pero de una manera ligeramente diferente.
Enkouyami
@Enkouyami Menos las diferencias en las citas, parece exactamente lo mismo.
Camilo Martin
1
@Enkouyami Debido a que la barra diagonal inversa entre comillas dobles escapa a un personaje (supuestamente se escapa el asterisco, pero supongo que es un error tipográfico), mientras que entre comillas simples la barra diagonal inversa no se interpreta. Si se quiere una barra diagonal inversa, "\\"se usaría (de lo contrario, siempre tendría que recordar qué caracteres son escapes especiales). Por lo tanto, es una diferencia de citas si el autor quiso decir "citar el carácter global" (innecesario). De cualquier manera, una barra invertida como esa es un error tipográfico.
Camilo Martin
39

Tratar:

unzip /path/to/archive.zip 'in/archive/folder/*' -d /path/to/unzip/to
Mark Adler
fuente
44
¿hice esto? Consigo caution: filename not matched: foldername/\*cuando corro unzip $repozip "$2-master/\*" -d /srv/www/magento/, donde $2es el nombre de la carpeta en el zip quiero tirar de todos los archivos y carpetas de
jeremy.bass
10
Trabajó sin \, solo "path/*".
Alex
8
¿Hay alguna forma de extraer el contenido de "in / archive / folder / *" que no conserve la ruta "in / archive / folder /"? Terminé usando mvdespués para obtener archivos donde los necesitaba.
jerrygarciuh
66
Úselo -jpara eso.
Mark Adler
44
-jelimina toda la información de ruta y todos los archivos van a la carpeta de destino. ¿Hay alguna manera de eliminar solo la parte común de la ruta? Similar a la cremallera -r.
Bob Stein
6

Las dos respuestas existentes son correctas, pero es un poco complicado especificar el directorio de destino, eso debería aclararse mejor.

Digamos que /target/root/es el directorio de destino sobre la acción original de descompresión, por ejemplo:

unzip -qq src.zip -d "/target/root/"

Luego, tenemos que usar lo mismo /target/root/que el directorio de destino después, aunque queremos extraer solo un subdirectorio específico, como funciona la descompresión:

unzip -qq src.zip "sub/dir/*" "/target/root/"

Después de todo, la regla es realmente simple, use el mismo directorio raíz de destino para la -dopción .

Por cierto, la -qqopción es que descomprimir sea realmente silencioso, no dude en eliminarlo.

ryenus
fuente
FYI: hice <kbd> descomprimir -qq 2.3.zip "magento2-2.3 / vendor / *" "vendor /" </kbd> y obtuve <kbd> precaución: nombre de archivo no coincidente: vendedor / `</kbd>. Esto está en una instalación de ubuntu en bash. Raramente descomprimo, probablemente hice algo más mal ...
Chris K