puede usar el gzip -r myfoldercual gzip los archivos de forma recursiva. De la misma manera, puede descomprimir archivos utilizando los gunzip -r myfolder que descomprimirá archivos de forma recursiva. Para más información, man gzip
Valentin Bajrami
12
Uso tar; Admite opciones de compresión. gzipestá diseñado como un complemento tar, no como un reemplazo.
devnull 01 de
13
Tenga en cuenta que la sugerencia de @ val0x00ff es casi seguro que no es lo que desea lograr.
Shadur 01 de
44
@Shadur por eso lo publiqué commentya que esa no era la respuesta a su pregunta.
Valentin Bajrami
2
Para demostrar lo que significa @Shadur. Archivos dados 1y 2bajo carpeta playground. gzip -r ./playgroundle dará 1.gzy 2.gz(y no más 1y 2archivos) en la carpeta playground, NO un archivo comprimido con todo lo que contiene.
Jeff Xiao
Respuestas:
660
No.
A diferencia zip, gzipfunciona como un algoritmo de compresión única .
Debido a diversas razones, algunas de las cuales evocan a la era de las unidades de cinta, Unix utiliza un programa llamado tarpara archivar datos, que luego puede ser comprimido con un programa de compresión como gzip, bzip2, 7zip, etc.
Para "comprimir" un directorio, el comando correcto sería
tar -zcvf archive.tar.gz directory/
Esto le dirá tara
comprimirlo usando el algoritmo z (gzip)
c (crear) un archivo de los archivos en directory( tares recursivo por defecto)
v (verbosely) list (en / dev / stderr para que no afecte los comandos canalizados) todos los archivos que agrega al archivo.
y almacenar la salida como un f (archivo) llamadoarchive.tar.gz
El tarcomando ofrece gzipsoporte (a través de la -zbandera) únicamente para su conveniencia. El gzipcomando / lib está completamente separado. El comando anterior es efectivamente el mismo que
tar -cv directory | gzip > archive.tar.gz
Para descomprimir y descomprimir el archivo en el directorio actual que usaría
tar -zxvf archive.tar.gz
Ese comando es efectivamente el mismo que
gunzip < archive.tar.gz | tar -xv
tartiene muchas, muchas, MUCHAS otras opciones y usos también; Recomiendo leer su página de manual en algún momento.
Solo para hacer las cosas aún más explícitas, esto es exactamente equivalente tar -cv directory | gzip > archive.tar.gz. El archivo resultante se puede extraer con tar -zxvfo incluso zcat file.tar.gz | tar -xv. Señale que el tar es completamente independiente del gzip, el tarcomando solo incluye soporte gzip para mayor comodidad.
Patrick
He estado usando tar cvzfdurante bastante tiempo. Una cosa a tener en cuenta: si usa Windows ( 7-zippara especificar) para descomprimir un *.tar.gzarchivo, se necesitan dos rondas. Uno para descomprimir el *.tar.gzarchivo en un *.tararchivo, el siguiente para descomprimir ese archivo tar en el contenido original. aumenta el tiempo total de descompresión, especialmente para archivos grandes (por ejemplo, registros)
Jeff Xiao
1
¿La denominación del archivo afecta algo relacionado con la máquina? Sé que sería bueno que las personas conocieran el algoritmo utilizado originalmente para comprimirlo (por lo tanto, .gz), pero aparte de eso, ¿importa realmente cómo se nombra el archivo?
hello_there_andy
3
@hello_there_andy No hay diferencia para la mayoría de los Unix, pero Windows (y la finalización de la pestaña inteligente en Linux) harán suposiciones basadas en la extensión del nombre de archivo.
El gzipcomando no comprimirá recursivamente un directorio en un solo archivo zip, cuando use el -rinterruptor. Más bien, caminará por esa estructura de directorios y comprimirá cada archivo que encuentre en un archivo separado.
#!/bin/bash
if [[ -d $1 ]]; then
cd "$1"
cd ..
base=$(basename "$1")
tar -zcvf "$base.tgz" "$base"
if [[ $? == 0 && -f "$base.tgz" ]]; then
rm -rf "$base"
fi
else
echo "Usage: $0 DIRECTORY";
fi
ungzipdir:
#!/bin/bash
if [[ -f $1 ]]; then
base=${1%%.*}
file=$(basename "$1");
dir=$(basename "$base");
if [[ ! -d $base ]]; then
mkdir "$base"
cd "$base"
cd ..
tar -xvf "$file"
if [[ $? == 0 && -d "$dir" ]]; then
rm -f "$file"
fi
else
echo "Directory $base already exists. Nothing done."
fi
else
echo "Usage: $0 file.tgz";
fi
(!!!) Por favor, pruebe antes de usar (ya que hay una 'rm -f' que podría eliminar datos importantes si se usa de manera poco común).
Cómo utilizar:
cd /home/; gzipdir MyDirectory o gzipdir /home/MyDirectory
Creará /home/MyDirectory.tgz y eliminará MyDirectory en caso de éxito (!!!).
ungzipdir /home/MyDirectory.tgz
Creará / home / MyDirectory y eliminará /home/MyDirectory.tgz en caso de éxito.
Para comprimir TODOS los archivos en un directorio: find ./* -maxdepth 0 -type d -exec gzipdir {} \; (tenga cuidado con el comando find, pruébelo -exec echo {}primero y asegúrese de que no está capturando './' que comprimirá el directorio de PADRES, posiblemente rompiendo todo su directorio de inicio)
Andrew Lorien
1
Recomiendo usar pigz( Implementación paralela de GZip )
Si tiene una nueva pregunta, hágala haciendo clic en el botón Hacer pregunta . Incluya un enlace a esta pregunta si ayuda a proporcionar contexto. - De la opinión
Jeff Schaller
2
@JeffSchaller: Esta es una respuesta. Es un error grave (creo), pero claramente es una respuesta.
Scott
1
@ize: estoy bastante seguro de que el comando que publicó no utiliza, de hecho, gzip.
dhag
1
Puntos por usar zip como la pregunta formulada, lo más probable es que al autor le hubiera gustado saber que es posible HACER LO MISMO EXACTO que solía hacer en Windows. Es triste que la mayoría de la gente no quiera pensar tan lejos.
Florian Heigl
2
Es complicado cuando la pregunta especifica ... "usando gzip".
Jeff Schaller
1
Para completar, si desea tar el archivo en segundo plano, use la respuesta de @ Shadur y agregue &al final:
gzip -r myfolder
cual gzip los archivos de forma recursiva. De la misma manera, puede descomprimir archivos utilizando losgunzip -r myfolder
que descomprimirá archivos de forma recursiva. Para más información,man gzip
tar
; Admite opciones de compresión.gzip
está diseñado como un complementotar
, no como un reemplazo.comment
ya que esa no era la respuesta a su pregunta.1
y2
bajo carpetaplayground
.gzip -r ./playground
le dará1.gz
y2.gz
(y no más1
y2
archivos) en la carpetaplayground
, NO un archivo comprimido con todo lo que contiene.Respuestas:
No.
A diferencia
zip
,gzip
funciona como un algoritmo de compresión única .Debido a diversas razones, algunas de las cuales evocan a la era de las unidades de cinta, Unix utiliza un programa llamado
tar
para archivar datos, que luego puede ser comprimido con un programa de compresión comogzip
,bzip2
,7zip
, etc.Para "comprimir" un directorio, el comando correcto sería
Esto le dirá
tar
acomprimirlo usando el algoritmo z (gzip)
c (crear) un archivo de los archivos en
directory
(tar
es recursivo por defecto)v (verbosely) list (en / dev / stderr para que no afecte los comandos canalizados) todos los archivos que agrega al archivo.
y almacenar la salida como un f (archivo) llamado
archive.tar.gz
El
tar
comando ofrecegzip
soporte (a través de la-z
bandera) únicamente para su conveniencia. Elgzip
comando / lib está completamente separado. El comando anterior es efectivamente el mismo quePara descomprimir y descomprimir el archivo en el directorio actual que usaría
Ese comando es efectivamente el mismo que
tar
tiene muchas, muchas, MUCHAS otras opciones y usos también; Recomiendo leer su página de manual en algún momento.fuente
tar -cv directory | gzip > archive.tar.gz
. El archivo resultante se puede extraer contar -zxvf
o inclusozcat file.tar.gz | tar -xv
. Señale que el tar es completamente independiente del gzip, eltar
comando solo incluye soporte gzip para mayor comodidad.tar cvzf
durante bastante tiempo. Una cosa a tener en cuenta: si usa Windows (7-zip
para especificar) para descomprimir un*.tar.gz
archivo, se necesitan dos rondas. Uno para descomprimir el*.tar.gz
archivo en un*.tar
archivo, el siguiente para descomprimir ese archivo tar en el contenido original. aumenta el tiempo total de descompresión, especialmente para archivos grandes (por ejemplo, registros)El
gzip
comando no comprimirá recursivamente un directorio en un solo archivo zip, cuando use el-r
interruptor. Más bien, caminará por esa estructura de directorios y comprimirá cada archivo que encuentre en un archivo separado.Ejemplo
antes de
ahora ejecuta el
gzip
comandodespués
Si prefiere comprimir la estructura del directorio, es probable que desee utilizar el
tar
comando y luego comprimir el.tar
archivo resultante .Ejemplo
Lo que da como resultado el siguiente archivo único:
Puedes confirmar su contenido:
fuente
Escribí estos 2 comandos:
gzipdir
:ungzipdir
:(!!!) Por favor, pruebe antes de usar (ya que hay una 'rm -f' que podría eliminar datos importantes si se usa de manera poco común).
Cómo utilizar:
cd /home/; gzipdir MyDirectory
ogzipdir /home/MyDirectory
Creará /home/MyDirectory.tgz y eliminará MyDirectory en caso de éxito (!!!).
ungzipdir /home/MyDirectory.tgz
Creará / home / MyDirectory y eliminará /home/MyDirectory.tgz en caso de éxito.
fuente
find ./* -maxdepth 0 -type d -exec gzipdir {} \;
(tenga cuidado con el comando find, pruébelo-exec echo {}
primero y asegúrese de que no está capturando './' que comprimirá el directorio de PADRES, posiblemente rompiendo todo su directorio de inicio)Recomiendo usar
pigz
( Implementación paralela de GZip )tar -cvf - dir | pigz -9 > /path/to/dir.tar.gz
fuente
La respuesta a la pregunta "¿Puedo comprimir una carpeta completa usando zip en linux?" Es usar la sintaxis:
fuente
Para completar, si desea tar el archivo en segundo plano, use la respuesta de @ Shadur y agregue
&
al final:fuente
Si su tar de Linux no admite la
-z
opción, puede usar lo siguiente:fuente