Cómo comprimir o descomprimir archivos desde la terminal de Linux

Indicador de shell de Linux
Fatmawati Achmad Zaenuri / Shutterstock.com

Los archivos ZIP son un archivo universal comúnmente utilizado en sistemas Windows, macOS e incluso Linux. Puede crear un archivo zip o descomprimir archivos de uno con algunos comandos comunes de terminal de Linux.

El formato de archivo comprimido ZIP

Gracias al dominio del formato ZIP en el ámbito de Windows, los archivos ZIP son probablemente la forma más común de archivo comprimido en el mundo.

Si bien los archivos .tar.gz y tar.bz2 son comunes en Linux, los usuarios de Windows probablemente le enviarán un archivo en formato ZIP. Y, si desea archivar algunos archivos y enviarlos a un usuario de Windows, el formato ZIP será la solución más fácil y compatible para todos.

zip, unzip y otras utilidades

Es posible que ya sepa que los sistemas operativos Linux y tipo Unix , como macOS, tienen herramientas que le permiten crear archivos ZIP y extraer archivos de ellos, llamados zipy unzip. Pero hay toda una familia de utilidades relacionadas, tales como zipcloak, zipdetails, zipsplit, y zipinfo.

Verificamos algunas distribuciones de Linux para ver si incluían estas utilidades en la instalación estándar. Todas las utilidades estaban presentes en Ubuntu 19.04, 18.10 y 18.04. También estuvieron presentes en Manjaro 18.04. Fedora 29 incluyó zipy unzip, pero ninguna de las otras utilidades y ese también fue el caso de CentOS.

Para instalar los elementos que faltan en Fedora 29, use el siguiente comando:

sudo dnf instalar perl-IO-Compress

comando de instalación zip para Fedora

Para instalar los elementos que faltan en CentOS 7, use el siguiente comando:

sudo yum instalar perl-IO-Compress

Comando de instalación zip en Centos

Si alguna de las utilidades zip falta en una distribución de Linux que no se mencionó anteriormente, use la herramienta de administración de paquetes de esa distribución de Linux para instalar el paquete requerido.

Cómo crear un archivo ZIP con el comando zip

Para crear un archivo ZIP, debe indicar zipel nombre del archivo de almacenamiento y qué archivos incluir en él. No es necesario que agregue la extensión «.zip» al nombre del archivo, pero no hace ningún daño si lo hace.

Para crear un archivo llamado que source_code.zipcontenga todos los archivos de código fuente C y archivos de encabezado en el directorio actual, debe usar este comando:

zip código_fuente * .c * .h

comando zip en una ventana de terminal

Cada archivo se enumera a medida que se agrega. Se muestra el nombre del archivo y la cantidad de compresión que se logró en ese archivo.

salida del comando zip en una ventana de terminal

Si observa el nuevo archivo ZIP, puede ver que la extensión de archivo «.zip» ha sido agregada automáticamente por zip.

ls -l código_fuente.zip

ls en un archivo zip en una ventana de terminal

Si no desea ver la salida de zipcuando se crea el archivo ZIP, use la -qopción (silencioso).

zip -q código_fuente * .c * .h

-q opción silenciosa en una ventana de terminal

Incluir directorios en archivos ZIP

Para incluir subdirectorios en el archivo ZIP, use la -ropción (recursiva) e incluya el nombre del subdirectorio en la línea de comando. Para crear un archivo ZIP como antes y también incluir el subdirectorio del archivo, use este comando.

zip -r -q archivo de código fuente / * .c * .h

-r opción recursiva en una ventana de terminal

Para ser considerado con la persona que extraerá los archivos del archivo ZIP que está creando, a menudo es de buena educación crear archivos ZIP con los archivos dentro de un directorio. Cuando la persona que recibe el archivo ZIP lo extrae, todos los archivos se colocan ordenadamente dentro de un directorio en su computadora.

Relacionado:  Cómo usar filtros de Wireshark en Linux

En el siguiente comando, vamos a archivar el workdirectorio y todos los subdirectorios. Tenga en cuenta que este comando se emite desde el directorio principal de la workcarpeta.

zip -r -q código_fuente trabajo /

comprimir el directorio de trabajo en una ventana de terminal

Configuración del nivel de compresión

Puede establecer cuánta compresión se aplica a los archivos a medida que se agregan al archivo ZIP. El rango es de 0 a 9, siendo 0 sin compresión alguna. Cuanto mayor sea la compresión, más tardará en crear el archivo ZIP. Para archivos ZIP de tamaño modesto, la diferencia de tiempo no es una penalización significativa. Pero entonces, para archivos ZIP de tamaño modesto, la compresión predeterminada (nivel 6) probablemente sea lo suficientemente buena de todos modos.

Para llegar zipa usar un nivel específico de compresión, pase el número como una opción en la línea de comando, con un «-«, así:

zip -0 -r -q código_fuente trabajo /

Opción de compresión -0 en una ventana de terminal

El nivel de compresión predeterminado es 6. No es necesario proporcionar la -6opción, pero no hará ningún daño si lo hace.

zip -r -q código_fuente trabajo /

nivel de compresión 6 en una ventana de terminal

El nivel máximo de compresión es el nivel 9.

zip -9 -r -q código_fuente trabajo /

-9 compresión en una ventana de terminal

Con la selección de archivos y directorios que se archivan aquí, la diferencia entre sin compresión (nivel 0) y la compresión predeterminada (nivel 6) es 400K. La diferencia entre la compresión predeterminada y el nivel más alto de compresión (nivel 9) es solo 4K.

Puede que no parezca mucho, pero para los archivos que contienen cientos o incluso miles de archivos, la pequeña cantidad de compresión adicional por archivo se sumaría a un ahorro de espacio que vale la pena.

Adición de contraseñas a archivos ZIP

Agregar contraseñas a archivos ZIP es fácil. Use la -eopción (encriptar) y se le pedirá que ingrese su contraseña y que vuelva a ingresarla para verificación.

zip -e -r -q código_fuente trabajo /

Agregar contraseñas a archivos zip en una ventana de terminal

Cómo descomprimir un archivo ZIP con el comando descomprimir

Para extraer los archivos de un archivo ZIP, use el comando descomprimir y proporcione el nombre del archivo ZIP. Tenga en cuenta que haces necesidad de proporcionar la extensión “.zip”.

descomprimir source_code.zip

el comando descomprimir en una ventana de terminal

A medida que se extraen los archivos, se enumeran en la ventana del terminal.

salida de descomprimir en una ventana de terminal

Los archivos ZIP no contienen detalles sobre la propiedad del archivo. Todos los archivos que se extraen tienen el propietario establecido en el usuario que los extrae.

Relacionado:  Cómo exportar e importar sus sistemas Linux en Windows 10

Al igual que zip, unzip tiene una -qopción (silenciosa), por lo que no es necesario ver la lista de archivos a medida que se extraen.

descomprimir -q source_code.zip

descomprimir la opción -q en una ventana de terminal

Extraer archivos a un directorio de destino

Para extraer los archivos en un directorio específico, use la -dopción (directorio) y proporcione la ruta al directorio en el que desea que se extraiga el archivo.

descomprimir -q código_fuente.zip -d ./development

descomprimir en un directorio de destino en una ventana de terminal

Extraer archivos ZIP protegidos con contraseña

Si se ha creado un archivo ZIP con una contraseña, se unziple pedirá la contraseña. Si no proporciona la contraseña correcta,  unzipno extraerá los archivos.

descomprimir -q source_code.zip

el comando descomprimir con contraseña en una ventana de terminal

Si no le importa que otras personas vean su contraseña, ni que se almacene en su historial de comandos, puede proporcionar la contraseña en la línea de comandos con la -Popción (contraseña). (Debe utilizar una «P» mayúscula)

descomprimir -P cincuenta.treacle.cutlass -q código_fuente.zip

descomprimir con la opción de contraseña en una ventana de terminal

Excluir archivos

Si no desea extraer un archivo o grupo de archivos en particular, use la -xopción (excluir). En este ejemplo, queremos extraer todos los archivos excepto los que terminan en una extensión «.h».

descomprimir -q código_fuente.zip -x * .h

descomprimir la opción de exclusión en una ventana de terminal

Sobrescritura de archivos

Suponga que ha extraído un archivo pero ha eliminado algunos de los archivos extraídos por error.

Una solución rápida para eso sería extraer los archivos una vez más. Pero si intenta extraer el archivo ZIP en el mismo directorio que antes, se unziple pedirá una decisión sobre la sobrescritura de los archivos. Esperará una de las siguientes respuestas.

Aparte de la rrespuesta (renombrar), estas respuestas distinguen entre mayúsculas y minúsculas.

  • y: Sí, sobrescribir este archivo
  • n: No, no sobrescribas este archivo
  • R: Todo, sobrescribe todos los archivos
  • N: Ninguno, no sobrescribe ninguno de los archivos
  • r: Renombrar, extraer este archivo pero darle un nuevo nombre. Se le pedirá un nuevo nombre.

sobrescribir las solicitudes en una ventana de terminal

Para forzar la unzipsobrescritura de los archivos existentes, utilice la -oopción (sobrescribir).

descomprimir -o -q código_fuente.zip

opción de sobrescritura en una ventana de terminal

La forma más eficaz de reemplazar los archivos que faltan sería unzipextraer únicamente los archivos del archivo que no estén en el directorio de destino. Para hacer esto, use la -nopción (nunca sobrescribir).

descomprimir -n código_fuente.zip

descomprimir con la opción -n nunca sobrescribir en una ventana de terminal

Mirar dentro de un archivo ZIP

A menudo es útil e instructivo ver una lista de los archivos dentro de un archivo ZIP antes de extraerlo. Puede hacer esto con la -lopción (listar archivo). Se canaliza a través lessde hacer manejable la salida.

descomprimir -l código_fuente.zip | Menos

descomprimir la opción de listado en una ventana de terminal

La salida muestra los directorios y archivos dentro del archivo ZIP, su longitud y la hora y fecha en que se agregaron al archivo. Presione “q” para salir less.

enumerar la salida del archivo en una ventana de terminal

Hay otras formas de mirar dentro de un archivo ZIP que brindan diferentes tipos de información, como veremos.

Agregar una contraseña con el comando zipcloak

Si ha creado un archivo ZIP pero olvidó agregar una contraseña, ¿qué puede hacer? Puede agregar rápidamente una contraseña al archivo ZIP usando el zipcloakcomando. Pase el nombre del archivo ZIP en la línea de comando. Se te solicitará una contraseña. Debe verificar la contraseña ingresándola por segunda vez.

zipcloak source_code.zip

zipcloak en una ventana de terminal

Ver detalles del archivo con el comando zipdetails

El zipdetailscomando le mostrará mucha información sobre el archivo ZIP. La única forma sensata de manejar la cantidad de salida que puede dar este comando es canalizarlo less.

zipdetails source_code.zip | Menos

el comando zipdetails en una ventana de terminal

Tenga en cuenta que la información incluirá nombres de archivo incluso si el archivo ZIP está protegido con contraseña. Este tipo de información se almacena dentro del archivo ZIP como metadatos y no forma parte de los datos cifrados.

Relacionado:  ¿Cuál es la diferencia entre Linux y Unix?

salida de zipdetails en una ventana de terminal

Buscar dentro del archivo con el comando zipgrep

El zipgrepcomando le permite buscar dentro de los archivos en un archivo ZIP. En el siguiente ejemplo, queremos saber qué archivos dentro del archivo ZIP tienen el texto «keyval.h» en ellos.

zipgrep keyval.h source_code.zip

el comando zipgrep en una ventana de terminal

Podemos ver que los archivos slang.cy getval.ccontienen la cadena «keyval.h». También podemos ver que hay dos copias de cada uno de estos archivos en diferentes directorios en el archivo ZIP.

Ver información con el comando zipinfo

El zipinfocomando le ofrece otra forma de mirar dentro de un archivo ZIP. Como antes, canalizamos la salida less.

zipinfo source_code.zip | Menos

comando zipinfo en una ventana de terminal

De izquierda a derecha, la salida muestra:

  • Los permisos del archivo
  • La versión de la herramienta utilizada para crear el archivo ZIP
  • El tamaño del archivo original
  • Un descriptor de archivo (descrito a continuación)
  • El método de compresión (deflación, en este caso)
  • La marca de tiempo y datos
  • El nombre del archivo y cualquier directorio

El descriptor de archivo se compone de dos caracteres. El primer carácter será una «t» o una «b» para indicar un archivo de texto o binario. Si es mayúscula, el archivo está encriptado. El segundo carácter puede ser uno de cuatro caracteres. Este carácter representa qué tipo de metadatos se incluye para este archivo: ninguno, un encabezado local extendido, un «campo adicional» o ambos.

  • -: si no existe ninguno, el carácter será un guión
  • l: si hay un encabezado local extendido pero no un campo adicional
  • x: si no hay un encabezado local extendido pero hay un campo adicional
  • X: si hay un encabezado local extendido y hay un campo adicional

salida zipinfo en una ventana de terminal

Dividir el archivo con el comando zipsplit

Si necesita enviar el archivo ZIP a otra persona, pero existen restricciones de tamaño o problemas con la transmisión del archivo, puede usar el zipsplitcomando para dividir el archivo ZIP original en un conjunto de archivos ZIP más pequeños.

La -nopción (tamaño) le permite establecer un tamaño máximo para cada uno de los nuevos archivos ZIP. En este ejemplo, dividimos el source_code.ziparchivo. No queremos que ninguno de los nuevos archivos ZIP supere los 100 KB (102400 bytes).

zipsplit -n 102400 código_fuente.zip

el comando zipsplit en una ventana de terminal

El tamaño que elija no puede ser menor que el tamaño de cualquiera de los archivos en el archivo ZIP.

Con estos comandos, puede crear sus propios archivos ZIP, descomprimir los archivos ZIP que reciba y realizar otras operaciones en ellos sin tener que salir del terminal de Linux.