¿Cómo comprimo / descomprimo en la línea de comandos de Unix?


540

¿Cómo puedo crear y extraer archivos zip desde la línea de comandos?


3
@joachim, debe hacer la pregunta en una pregunta y proporcionar una respuesta en una respuesta. No hay ningún problema en responder sus propias preguntas, pero no como parte de la pregunta en sí, ya que eso desglosa la ventaja de SO de toda la comunidad de votos sobre la mejor respuesta. Además, esto probablemente sea más adecuado para el superusuario, ya que no está relacionado con la programación.

2
¿Dónde documentará cómo conectarse y comprobar SO si olvida su inicio de sesión?

@ rlb.usa: trabajo en muchos lugares diferentes en muchos servidores diferentes. Usar SA para una nota como esta también ayuda a otras personas, como yo lo veo.
joachim

Respuestas:


663

Típicamente se utiliza tarpara crear un archivo sin comprimir y, o bien gzipo bzip2para comprimir ese archivo. El correspondiente gunzipy bunzip2los comandos pueden ser utilizados para descomprimir dicho archivo, o simplemente puede usar banderas en el tarcomando para realizar la descompresión.

Si se refiere específicamente al formato de archivo Zip , simplemente puede usar los comandos zipy unzip.

Para comprimir:

zip squash.zip file1 file2 file3

o comprimir un directorio

zip -r squash.zip dir1

Para descomprimir:

unzip squash.zip

esto lo descomprime en su directorio de trabajo actual.


72
Personalmente solo uso la zip -r9 archive.zip files...sintaxis (-r = recursiva -9 = compresión máxima).
anfetamáquinas

3
Solo como una nota al margen: zippuede crear muchos sabores diferentes de archivos .ZIP, así como usar muchos compresores diferentes. Por otro lado, hay una serie de otras herramientas de compresión con nombres similares: 7-Zip, gzip, bzip2, rzip, etc., que no son intercambiables.
polemon

55
En caso de que no desee que se incluya el directorio principal:cd dir1; zip -r ../squash.zip *
Marinos, el

Estoy confundido, hice esto y obtengo una larga lista de inflaciones y extracciones, pero cuando reviso el directorio está vacío, ¿guardo el archivo zip original? ¿Donde se va todo?
Desarrollador de verano

11
Para el registro, utilice unzip -d myfolder squash.zippara extraer en un nuevo directorio separado ( myfolder) en lugar de colocar todos los archivos directamente en el directorio actual, lo que puede ser molesto si el archivo zip contiene muchos archivos y directorios en su nivel superior. Esto imita cómo funciona la mayoría de las herramientas de descompresión de UI.
Alexander Klimetschek

64

Hay una gran cantidad de formas diferentes de comprimir y descomprimir en derivados de UNIX, por lo que supondré que querías decir "zip" en el sentido genérico en lugar de un formato de archivo específico .

Puede comprimir archivos (en formato comprimido) con el tarprograma GNU :

tar -zcvf myfile.tgz .

que hará el directorio actual. Reemplace .con otros nombres de archivo si desea algo más.

Para descomprimir ese archivo, use:

tar -zxvf myfile.tgz

Eso supone, por supuesto, que tiene la tarcapacidad de hacer la compresión y combinar archivos en uno.

De lo contrario, puede usar tar cvfseguido de gzip(nuevamente, si está disponible) para la compresión y gunzipseguido de tar xvf.


Para el manejo específico de archivos en formato ZIP, recomendaría descargar 7zipy usar eso: reconoce una gran variedad de formatos de archivo, incluido el ZIP.


O use tar jcvf file.tar.bz2...para comprimir en formato bzip2 o tar Jcvf file.tar.xz ...para compresión xz.
OldTimer

44
Desestimé su respuesta porque la pregunta es sobre cómo lidiar con los archivos zip y no con los archivos tar.
Starfish

3
@Starfish, ciertamente está dentro de tus derechos, gracias por al menos explicar por qué, tanta gente no se toma el tiempo para hacer eso :-) Tomé "zip" en el sentido más genérico (compresión) en lugar de un formato específico, así que lo dejaré más claro.

Tenga en cuenta que los archivos tar pueden no funcionar correctamente al moverse entre diferentes plataformas, mac a linux o viceversa. Zip es mucho más seguro, ya que funciona correctamente en todos los sistemas.
user1751825

Supongo que técnicamente esto es gzip, así que está bien. Supongo. Aunque, obviamente, no es lo que pedía la pregunta.
Búho

30

Si no tiene instalados paquetes zip y descomprimir y tiene java, puede usar jarpara descomprimir:

jar -xf file.zip

3
No es mi servidor, no descomprimir, zip, 7z, nada ... Y esto funcionó. ¡Gracias!
Dariusz

2
Este es un gran consejo.
Starfish

29

Bueno, cuando se trata de distribuir archivos para una variedad de sistemas operativos, recomendaría 7-zip .

Por lo general, en el paquete p7zip, obtendrá el comando 7zy 7za, con el que puede crear sus propios archivos 7z.

7zatambién puede descomprimir archivos zip estándar ( pkzip ) (y crearlos también con el -tzipinterruptor).

Apresamiento:

7za a archive.7z file1 file2 directory/

Descomprimiendo:

7za x archive.7z

También puede crear archivos autoextraíbles con el -sfxinterruptor:

7za a -sfx archive.exe files1 file2 dir

Recomiendo este método en caso de que los usuarios de Windows no puedan abrir archivos 7z (en caso de que desee aconsejar una herramienta para eso: PeaZip ).

Si desea usar el mismo algoritmo de compresión con sus tarballs, use el -Jinterruptor con tar:

tar cJf archive.tar.xz file1 file2 dir

xzes una herramienta UNIX, que utiliza LZMA2 para la compresión, pero funciona de la forma gz, bz2etc funciona. Incluso funciona como un filtro.

7z no crea archivos con información completa del sistema de archivos en UNIX, por lo que deberá usarlo tarantes de usar 7z (pero dado que 7z almacena otra información sobre el tararchivo, recomiendo usarlo xz, ya que está diseñado para ello):

tar cf - file1 file2 dir | 7za z -si archive.tar.7z

2
Quizás debería agregar esta respuesta atool, es una pequeña herramienta agradable que hace que el uso de muchos compresores diferentes sea más cómodo. Asociar eso ay crear un archivo se convierte a arc.7z folder/o extraer un simplea arc.7z
polemon

21
unzip <filename>

y

zip -r archive.zip <filename> [filename]

Deberá asegurarse de que estos comandos estén instalados a través de su administrador de paquetes. No es más difícil que usar cualquier otra cosa en la línea de comando. Ciertamente es más simple que crear archivos con tar.


Sé que este es un hilo viejo pero esta es la mejor respuesta. No habla de 7z o alquitrán, es conciso y directo al grano
Kyle

4

BSD Tar también puede hacer esto

bsdtar acf bravo.zip alfa.jpg

O:

bsdtar xf bravo.zip

BSD tartiene la ventaja de admitir bastantes formatos de compresión adicionales en comparación con GNU tary otros tars. El mayor beneficio es, tal vez, que lo hace mientras usa una tarsintaxis similar . Seguramente se puede utilizar 7z, unrar, unzip, etc desde la línea de comandos, pero usar una diferente sintaxis.
njsg

3

La respuesta más estándar es pax, que se recomienda sobre cpioy tar.

A diferencia de cpioPOSIX tar, pero al igual que GNU tar, paxpuede archivar y comprimir el archivo. Este comportamiento es diferente del zipque comprime cada archivo antes de colocarlo en el archivo.


1
¿ paxSoporta archivos zip?
Starfish

¡No, y tampoco admite paxarchivos!
roblogic

2

Esto cubre solo la extracción.

Para eso, comencé a usar dtrx.

El objetivo es eliminar la complejidad. Así que simplemente le pasa cualquier archivo y se da cuenta de lo que hay que hacer con él. Zip, tar, gz ... El uso es siempre el mismo - dtrx archive.zip. Hace algunas preguntas y ya está.

dtrxestá disponible en la mayoría de los repositorios, por lo que puede apt| yuminstalarlo.


1

A menudo me encuentro tratando de comprimir los archivos modificados en mi directorio de trabajo, ya sea para copiar todos los archivos modificados a otro directorio de trabajo de sandbox o para preservarlos por un corto tiempo porque quiero deshacer algunos de los cambios.

En ese caso, copio la lista de archivos modificados a un archivo temporal y lo uso zipcon la opción -@.

Digamos que modifiqué los archivos Foo.h, Bar.cc y TestBar.cc.

Digamos que creo un archivo llamado modified-files.txt cuyo contenido es:

Foo.h
Bar.cc
TestBar.cc

Ejecuto el siguiente comando para comprimir esos archivos:

cat modified-files.txt | zip modified-files.zip -@
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.