Introducción
El empaquetado y la compresión resuelven problemas relacionados, pero diferentes. Un archivo combina un árbol de directorios en un único flujo de datos y conserva sus nombres y estructura. La compresión representa los datos de forma más compacta. Un archivo .tar es un archivo empaquetado; un archivo .gz contiene datos comprimidos con gzip; y un archivo .tar.gz es un archivo tar comprimido con gzip.
Usted creará un proyecto pequeño, generará cada formato, inspeccionará un archivo antes de extraerlo, restaurará su contenido en un directorio independiente y comparará los datos restaurados con los originales. Este flujo de inspección, extracción y verificación evita sobrescribir archivos originales sin comprobarlos.
Cree un árbol de directorios que conservará
En este paso, creará un árbol de origen pequeño y registrará qué elementos deben conservarse durante el empaquetado y la extracción.
Cree los directorios de configuración, notas y datos:
cd /home/labex/project/archive-lab
mkdir -p source/{config,notes,data}
Escriba tres archivos con contenido diferente:
printf 'mode=training\nport=8080\n' > source/config/app.conf
printf 'Archive the complete project tree.\n' > source/notes/README.txt
printf 'alpha,beta,gamma\n1,2,3\n' > source/data/sample.csv
Use find para inspeccionar los archivos normales mediante rutas relativas al directorio de origen:
find source -type f -printf '%P\n' | sort
Cree e inspeccione un archivo tar
En este paso, empaquetará el árbol de origen sin comprimirlo y revisará los nombres de sus elementos.
Las letras principales de operación de tar son c para crear, t para listar, x para extraer y f para indicar el nombre del archivo. Use -C para cambiar el directorio de trabajo de tar antes de agregar source; así evitará almacenar una ruta absoluta larga:
cd /home/labex/project/archive-lab
tar -cf project.tar -C /home/labex/project/archive-lab source
El árbol de origen seguirá existiendo porque la creación del archivo lo lee, pero no lo mueve. Inspeccione tanto el archivo como uno de los archivos originales:
ls -lh project.tar
ls -l source/config/app.conf
Muestre los elementos antes de extraerlos:
tar -tf project.tar > tar-members.txt
cat tar-members.txt
Todos los elementos deben comenzar por source/ y no debe haber ninguna / inicial. Las rutas relativas de los elementos hacen que la restauración sea más segura y portátil.
Extraiga de forma segura y compare el resultado
En este paso, extraerá el contenido en un destino vacío en lugar de hacerlo sobre el origen. Después comparará ambos árboles.
Cree un directorio de restauración y use -C para indicar el destino de la extracción:
cd /home/labex/project/archive-lab
mkdir tar-restore
tar -xf project.tar -C tar-restore
Inspeccione las rutas restauradas:
find tar-restore -type f -printf '%P\n' | sort
Compare los árboles de forma recursiva. diff -r no muestra ninguna salida y termina correctamente cuando los árboles coinciden:
diff -r source tar-restore/source
echo "tar restore matches source" > tar-restore-ok.txt
cat tar-restore-ok.txt
Comprima y descomprima un archivo con Gzip
En este paso, verá en qué se diferencia gzip de un archivo empaquetado, ya que gzip opera sobre un único archivo normal.
Copie un archivo para no modificar el árbol de origen y, después, comprima la copia:
cd /home/labex/project/archive-lab
cp source/data/sample.csv sample-copy.csv
gzip sample-copy.csv
De forma predeterminada, gzip reemplaza la entrada por sample-copy.csv.gz:
ls -lh sample-copy.csv.gz
file sample-copy.csv.gz
Descomprímalo y compare su contenido con el original:
gunzip sample-copy.csv.gz
cmp source/data/sample.csv sample-copy.csv
echo "gzip round trip matches" > gzip-round-trip-ok.txt
cat gzip-round-trip-ok.txt
Gzip no empaqueta un árbol de directorios por sí solo; tar proporciona esa estructura.
Cree y restaure un archivo tar comprimido
En este paso, combinará el empaquetado de tar con la compresión gzip. La opción z indica a tar que pase los datos del archivo por gzip.
Cree project.tar.gz e inspecciónelo con las opciones -tzf correspondientes:
cd /home/labex/project/archive-lab
tar -czf project.tar.gz -C /home/labex/project/archive-lab source
tar -tzf project.tar.gz > targz-members.txt
cat targz-members.txt
Extraiga el contenido en un destino independiente y verifique el árbol:
mkdir targz-restore
tar -xzf project.tar.gz -C targz-restore
diff -r source targz-restore/source
echo "tar.gz restore matches source" > targz-restore-ok.txt
cat targz-restore-ok.txt
Las extensiones comunican el formato a las personas y a las herramientas: .tar.gz indica claramente que se trata de un archivo tar comprimido con gzip.
Intercambie el proyecto como un archivo Zip
En este paso, creará e inspeccionará un archivo Zip, un formato común en Linux, macOS y Windows.
zip -r agrega un árbol de directorios de forma recursiva. Ejecútelo desde la raíz del laboratorio para que las rutas almacenadas comiencen por source/:
cd /home/labex/project/archive-lab
zip -r project.zip source
Muestre los elementos sin extraerlos:
unzip -l project.zip
Use -d para elegir un destino independiente y, después, compare el resultado:
unzip -q project.zip -d zip-restore
diff -r source zip-restore/source
echo "zip restore matches source" > zip-restore-ok.txt
cat zip-restore-ok.txt
Resumen
Ha separado el empaquetado de la compresión, ha creado y listado archivos tar, ha completado un ciclo de compresión y descompresión con gzip, ha combinado ambas operaciones en .tar.gz y ha intercambiado el mismo árbol mediante Zip. Lo más importante es que ha restaurado el contenido en directorios independientes y ha comparado los datos, en lugar de asumir que crear el archivo era suficiente.



