No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Curso de Programación en Bash Shell

Curso de Programación en Bash Shell

Marco Antonio Toscano Freire

Marco Antonio Toscano Freire

Empaquetamiento TAR, GZIP y PBZIP 2

35/43
Recursos

El empaquetamiento es un tema interesante para manejar respaldos u otro tipo de archivos para poder reducir el tamaño de uno o varios archivos para luego distribuirlos a través de la red u otra ubicación dentro del equipo.

  • tar: permite empaqueta múltiples archivos
  • gzip: Este solo nos permite empaquetar un único archivo, pero nos permite optimizar el tamaño del empaquetado. Suele usarse en conjunto con tar
  • pbzip2: Este comando permite soporta el multicore, multiprocesador. Solo podemos empaquetar un solo archivo.

Aportes 35

Preguntas 2

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Platzi, platzi, platzi… Me parece bastante mal que a un curso al que se le aplica una alta confianza por parte de los aprendices (y que, de hecho, muchos vienen aquí a tocar estos temas por primera vez), se les brinde una información confusa… El tanto hablar de parte de un instructor no implica que esté comparta en mejor manera el conocimiento (eso solo crea confusión), al contrario, mientras más simple, estructurada y certera sea la información que se comparte, mejor será la recepción del estudiante, me parece que deben tomar más en serio la calidad de sus cursos, ya que todos merecemos un producto de calidad…
|
Según la ayuda de los comandos en Linux, el comando tares para empaquetar y el comando gzip es para la compresión.

y los términos “ratio y rate” no son realmente lo mismo, “rate” si hace referencia a la cantidad, frecuencia o velocidad de un evento medible, sin embargo, “ratio” es una relación entre dos números que mide el grado de similitud entre ambos, p.ej. Si mi perro tiene 3 galletas, y mi gato tiene 6 galletas, entonces el “ratio” es 3:6, que también es expresado como un ratio de ½ o de 0.5… debería mencionar “rata”, o “rate” en inglés, o frecuencia, o velocidad, en vez de usar el término ratio…)

Tengo entendido que tar empaqueta y gzip comprime.

No entiendo el tema del RATIO.

# !/bin/bash
# Programa para ejemplificar el empaquetamiento con pbzip
# Autor: Juan Pablo @JPJimenezE

echo "## Empaquetar todos los scripts de la carpeta shellCourse"
## Recuerda tener instalado pbzip2 !!! por defecto no lo tiene ubuntu.

# En dos pasos
compressFile=shellCourse."$(date +%Y%m%d_%H%M%S%N)".tar
tar -cvf $compressFile *.sh
pbzip2 -f $compressFile   # Compresión bz2

# En un paso
compressFile=shellCourse."$(date +%Y%m%d_%H%M%S%N)".tar
tar -cjf "$compressFile".bz2 *.sh  # Compresión bz2

# Comprobar el empaquetado
ls -ali *.tar*

25_tar.sh

# ! /bin/bash
# Programa para ejemplificar el empaquetamiento con el comando tar
# Autor: Jose Suarez

echo "Empaquetar todos los scripts de la carpeta ShellCourse"

tar -cvf ShellCourses.tar *.sh

26_gzip.sh


# ! /bin/bash
# Programa para ejemplificar el empaquetamiento con el comando tar y gzip
# Autor: Jose Suarez

echo "Empaquetar todos los scripts de la carpeta ShellCourse"

tar -cvf ShellCourses.tar *.sh

#Cuando se empaqueta con gzip el empaquetamiento anterior se elimina
gzip ShellCourses.tar

echo "Empaquetar un solo archivo, con un ratio 9"
gzip -9 9_options.sh

27_pbzip2.sh


# ! /bin/bash
# Programa para ejemplificar el empaquetamiento con el comando pbzip
# Autor: Jose Suarez

echo "Empaquetar todos los scripts de la carpeta ShellCourse"

tar -cvf ShellCourses.tar *.sh

#Cuando se empaqueta con gzip el empaquetamiento anterior se elimina
pbzip2 -f ShellCourses.tar

echo "Empaquetar un directorio con tar y pbzip2"
tar -cf *.sh -c > ShellCoursedos.tar.bz2

Espero les sirva.

du -sh * les funciona para ver el tamaño de los archivos y directorios de la ruta donde se ubiquen

¿Por qué no simplmete usar -z o -j?

tar -czf shellCourse.tar.gz *.sh
tar -cjf shellCourse.tar.bz2 *.sh

Hay que tener muy en claro que tar solamente agrupa multiples archivos en uno sólo, no comprime al menos que tu se lo especifiques.

Si quisieramos agrupar y comprimir archivos en un sólo movimiento, hariamos lo siguiente:

$ tar czf shellCourse.tgz *.sh
Gran error. Platzi, tienen que ver el contenido de los cursos que hacen. empaquetar no es lo mismo que comprimir y los comandos que explica uno empaqueta y los otros 2 comprimen. También confunde el termino de ratio con "nivel de compresión" que no lo menciona, lo presenta como ambas cosas y no lo son.

Ejemplo con uso de menú:

#!/bin/bash
# Author: Enzo Venturi Iglesias
while :
  do
    clear
      tput rev; tput cup 1 2
      echo "MAIN - PACKING"; tput sgr0
      
      echo -e "\n"
      echo "1) TAR  "
      echo "2) GZIP "
      echo "3) PBZIP"
      echo "4) Exit "
      echo -e "\n"

      tput bold;
      read -p "Enter your choice [1-5]: " Pick

    case $Pick in
      1) echo -e "\nPackaging..."; tar -cjf 1Bash.tar *.sh; 
         sleep 3; exit 0;;
      2) echo -e "\nCompress... "; gzip 1Bash.tar     *.sh; 
         sleep 3; exit 0;;
      3) echo -e "\nCompress... "; pbzip -f 1Bash.tar *.sh; 
         sleep 3; exit 0;;
      5) echo -e "\nExiting...  "
         exit 0;;
    esac
done
# ! /bin/bash
# Programa para empaquetamiento con clave ZIP
# Author Diego Beltran histagram @diegodevelops

echo "Empaquetas todos los scripts con clave"

zip -e shellCourse *.sh```

TAR

  • TAR stands for “tape archive.”
  • TAR is primarily used for bundling multiple files and directories into a single archive file, without any compression applied.
  • TAR archives preserve file permissions, ownership, and other metadata.
  • TAR files often have the extension .tar.
  • TAR is commonly used in conjunction with compression tools like GZIP or BZIP2 to create compressed archive files.

Creo que este curso merece ser actualizado. El instructor pierde demasiado tiempo editando un archivo. Esas partes se pudieron omitir. Además, la información esta algo confusa cuando habla de tar y gzip.

Archivos .tar.gz:
Comprimir: tar -czvf empaquetado.tar.gz /carpeta/a/empaquetar/
Descomprimir: tar -xzvf archivo.tar.gz

Archivos .tar:
Empaquetar: tar -cvf paquete.tar /dir/a/comprimir/
Desempaquetar: tar -xvf paquete.tar

Archivos .gz:
Comprimir: gzip -9 index.php
Descomprimir: gzip -d index.php.gz

Archivos .zip:
Comprimir: zip archivo.zip carpeta
Descomprimir: unzip archivo.zip

También se puede combinar en una sola linea el tar y gzip
empaquetado y compresion
tar -czf shellCourse.tar.gz *.sh

Desempaquetar y descomprimir
tar -xzf shellCourse.tar.gz

la ultima linea no funciona, crea un archivo vació seria mejor de la siguiente manera:
tar -c *.sh | pbzip2 -c > shellCourseDos.tar.bz2

En el script 27 deberian revisar la ultima linea
lo mas simple es poner

echo "Empaquetar directorio con tar y pbzip2"
 tar -cjf shellcoursedos.tar.bz2 *.sh

Una manera para lograr que el script sea mas practico es pasar los archivos a empaquetar y comprimir por argumentos en la ejecucion del programa.

hola buenas tardes , yo pienso que en realidad el archivo .tar no se elimina sino que cambia o se mueve de ser un archivo empaquetado a ser un archivo comprimido

If you come from a Windows background, you may be familiar with the zip and rar formats. These are archives of multiple files compressed together.

In Unix and Unix-like systems (like Ubuntu), archiving and compression are separate.

tar puts multiple files into a single (tar) file.

gzip compresses one file (only).

So to get a compressed archive, you combine the two, first use tar or pax to get all files into a single file (archive.tar), then gzip it (archive.tar.gz). If you only have one file you need to compress (notes.txt), there’s no need for tar, so you just do gzip notes.txt which will result in notes.txt.gz. There are other types of compression, such as compress, bzip2 and xz which work in the same manner as gzip (apart from using different types of compression of course)

No le entiendo....
Aquí tienes un script en \*\*Bash\*\* que realiza operaciones de empaquetamiento y compresión usando \*\*TAR\*\*, \*\*GZIP\*\*, y \*\*PBZIP2\*\*. El script permite al usuario elegir entre diferentes opciones para empaquetar y comprimir archivos o directorios. \### Script en Bash para empaquetar y comprimir usando TAR, GZIP y PBZIP2 ```bash \#!/bin/bash \# Función para empaquetar archivos con TAR empaquetar\_tar() { echo "Empaquetando $1 en $1.tar" tar -cvf "$1.tar" "$1" } \# Función para empaquetar y comprimir con GZIP empaquetar\_gzip() { echo "Empaquetando y comprimiendo $1 con GZIP..." tar -cvzf "$1.tar.gz" "$1" } \# Función para empaquetar y comprimir con PBZIP2 empaquetar\_pbzip2() { echo "Empaquetando $1 y comprimiendo con PBZIP2..." tar -cvf "$1.tar" "$1" pbzip2 "$1.tar" } \# Función para mostrar el menú mostrar\_menu() { echo "Selecciona una opción:" echo "1) Empaquetar con TAR" echo "2) Empaquetar y comprimir con GZIP" echo "3) Empaquetar y comprimir con PBZIP2" echo "4) Salir" } \# Verificar si se proporcionó el archivo o directorio if \[\[ -z "$1" ]]; then echo "Debes proporcionar un archivo o directorio." echo "Uso: $0 \<archivo\_o\_directorio>" exit 1 fi \# Comienza el menú interactivo while true; do mostrar\_menu read -p "Opción: " opcion case $opcion in 1\) empaquetar\_tar "$1" ;; 2\) empaquetar\_gzip "$1" ;; 3\) empaquetar\_pbzip2 "$1" ;; 4\) echo "Saliendo..." exit 0 ;; \*) echo "Opción no válida. Intenta de nuevo." ;; esac done ``` \### Explicación del Script 1\. \*\*Funciones\*\*: \- `empaquetar\_tar`: Empaqueta un archivo o directorio usando \*\*TAR\*\*, generando un archivo `.tar`. \- `empaquetar\_gzip`: Empaqueta y \*\*comprime\*\* usando \*\*GZIP\*\*, generando un archivo `.tar.gz`. \- `empaquetar\_pbzip2`: Empaqueta con \*\*TAR\*\* y luego comprime usando \*\*PBZIP2\*\*, generando un archivo `.tar.bz2`. 2\. \*\*Menú interactivo\*\*: \- Muestra un menú con opciones para elegir entre empaquetar con TAR, comprimir con GZIP o PBZIP2, o salir del script. 3\. \*\*Verificación\*\*: \- Verifica si se ha proporcionado un archivo o directorio como argumento al ejecutar el script. 4\. \*\*Opciones del menú\*\*: \- La opción `1` empaqueta solo con TAR. \- La opción `2` empaqueta y comprime con GZIP. \- La opción `3` empaqueta con TAR y luego comprime con PBZIP2. \- La opción `4` sale del script. \### Uso del Script Guarda el script como `empaquetar.sh` y dale permisos de ejecución: ```bash chmod +x empaquetar.sh ``` Luego, ejecútalo pasando el archivo o directorio que deseas empaquetar como argumento: ```bash ./empaquetar.sh nombre\_directorio\_o\_archivo ``` El script mostrará un menú para seleccionar la opción deseada: 1\. Empaquetar con TAR. 2\. Empaquetar y comprimir con GZIP. 3\. Empaquetar y comprimir con PBZIP2. 4\. Salir. \### Ejemplos de Ejecución: \- Empaquetar un directorio: ```bash ./empaquetar.sh mi\_directorio ``` \- Seleccionar la opción de empaquetar y comprimir con GZIP: ``` Opción: 2 ``` Este script te permitirá empaquetar y comprimir archivos o directorios fácilmente usando diferentes métodos de compresión.
#!/bin/bash

# Función para validar entrada con expresión regular
function validar_entrada {
    local entrada
    read -p "$1" entrada
    while [[ ! $entrada =~ $2 ]]; do
        echo "Entrada no válida. $3"
        read -p "$1" entrada
    done
    echo "$entrada"
}

# Expresiones regulares
regex_ano="^[0-9]{4}$"
regex_mes="^[0-9]{2}$"
regex_dia="^(0[1-9]|[1-2][0-9]|3[0-1])$"
regex_hora="^(0[0-9]|1[0-9]|2[0-3])$"
regex_minuto="^[0-5][0-9]$"

# Solicitar y validar la información del usuario
ano=$(validar_entrada "Ingresa el año (YYYY): " "$regex_ano" "Debe tener el formato YYYY (cuatro dígitos).")
mes=$(validar_entrada "Ingresa el mes (MM): " "$regex_mes" "Debe tener el formato MM (dos dígitos).")
dia=$(validar_entrada "Ingresa el día (DD): " "$regex_dia" "Debe estar entre 01 y 31.")
hora=$(validar_entrada "Ingresa la hora (HH): " "$regex_hora" "Debe estar entre 00 y 23.")
minutos=$(validar_entrada "Ingresa los minutos (MM): " "$regex_minuto" "Debe estar entre 00 y 59.")

# Crear el nombre del archivo de log basado en la fecha y hora ingresadas
nombre_log="${ano}_${mes}_${dia}_${hora}_${minutos}_fecha.log"

# Escribir la información en el archivo de log
echo "${ano}:${mes}:${dia} ${hora}:${minutos}" >> "$nombre_log"

echo "La información se ha registrado en el archivo $nombre_log."

PBZIP2

  • PBZIP2 is an extension of the BZIP2 compression utility.
  • BZIP2, like GZIP, compresses individual files using the Burrows-Wheeler block-sorting algorithm and the Run-Length Encoding (RLE) algorithm.
  • PBZIP2, however, provides parallel compression and decompression capabilities, utilizing multiple processor cores or threads to speed up the compression process.
  • PBZIP2-compressed files typically have the extension .bz2.
  • PBZIP2 is often used in combination with TAR to create compressed TAR archives, resulting in files with the extension .tar.bz2.

GZIP

  • GZIP is a compression utility that operates on individual files.
  • GZIP uses the DEFLATE algorithm to compress files.
  • GZIP compression results in smaller file sizes, making it useful for compressing individual files or combining it with TAR for compressed archives.
  • GZIP-compressed files typically have the extension .gz.
  • GZIP is often used in combination with TAR to create compressed TAR archives, resulting in files with the extension .tar.gz.
  • El empaquetamiento es un tema interesante para manejar respaldos u otro tipo de archivos para poder reducir el tamaño de uno o varios archivos para luego distribuirlos a través de la red u otra ubicación dentro del equipo.

  • tar: permite empaqueta múltiples archivos

  • gzip: Este solo nos permite empaquetar un único archivo, pero nos permite optimizar el tamaño del empaquetado. Suele usarse en conjunto con tar

  • pbzip2: Este comando permite soporta el multicore, multiprocesador. Solo podemos empaquetar un solo archivo.

Script escrito y probado en Ubuntu 18.04
Funciones del script:
1.Crear un file .txt
2.Crear un folder
3.Mover el file al folder
4.Crear 2 files encintados del folder y eliminar el original
5.Comprimir el primer file encintado mediante gzip
6.Comprimir el segundo file encintado mediante pbzip2

Script:

<h1>!/bin/bash</h1>


#echo $1
#echo $2

#source_file=$1
#source_folder=$2

#Create a .txt file
touch test.txt
#touch $source_file
#source_file+=".txt"
echo “Test message!” >> test.txt
#echo “Test message” >> source_file

#Create a folder
#mkdir -m 764 $source_folder
mkdir test_folder

#Move the created file to the created folder
#mv $source_file $source_folder
mv test.txt test_folder

#Create 2 new tapped files from the created folder
#source_folder_1=$source_folder
#source_folder_1+="_1.tar"
#source_folder_2=$source_folder
#source_folder_2+="_2.tar"

#tar -cvf $source_folder_1 $source_folder
#tar -cvf $source_folder_2 $source_folder
tar -cvf “test_folder_1.tar” test_folder
tar -cvf “test_folder_2.tar” test_folder
#-c.Create. -v.Verbose. -f.File

#Remove the original created folder
#rm -rf $source_folder
rm -rf test_folder

#Create a gzip compressed file from the 1 new tapped file
#gzip is able to compress 1 file at time
#The original 1 new tapped file is eliminated

#gzip (1-9) rate.

<h1>rate 1. Faster compression but larger size</h1> <h1>rate 9. slower compression but smaller size</h1>

gzip -9 “test_folder_1.tar”
#gzip -9 $source_folder_1

#Created a pbzip2 (not installed by default) compressed file
#from the 2 new tapped file
#…$ sudo apt-get install pbzip2
#pbzip2 is able to compress 1 file at time but this can be
#done in a multicore system.
pbzip2 -f “test_folder_2.tar” # -f.File. A new file called
#“test_folder_2.tar.bz2” is created
#pbzip2 -f $source_folder_2

Algunas formas de empaquetar y desempaquetar
con Tar:
Comprimir: tar -cvf nombre.tar /dir/a/comprimir/
Descomprimir: tar -xvf nombre.tar

con gzip:
Comprimir: gzip -# archivo.ext
Descomprimir: gzip -d archivo.ext.gz

Entendido

Aunque Gzip y Bzip2 son muy buenos, al menos mejores que ZIP, ya todos deberían estar usando xz

# ! /bin/bash
# Programa para empaquetamiento PBZIP2
# Author Diego Beltran histagram @diegodevelops

echo "Empaquetas todos los scripts"

# -c : crear
# -v: ver lo que se empaqueta
# -f: file
tar -cvf shellCourse.tar *.sh
pbzip2 -f shellCourse.tar

echo "Empaquetar un directorio con tar y pbzip2"
tar -cf *.sh > shellCourseDos.tar.bz2```
# ! /bin/bash
# Programa para empaquetamiento GZIP
# Author Diego Beltran histagram @diegodevelops

echo "Empaquetas todos los scripts"

# -c : crear
# -v: ver lo que se empaqueta
# -f: file
tar -cvf shellCourse.tar *.sh

# cuando se emaqueta cpn gzip el empaquetamiento anterior se elimina
gzip shellCourse.tar

echo "Empaquetar un solo archivo con ratio 9"
gzip -9 9_options.sh```



sudo apt-get install pbzip2 # para instalar el paquete que nos permite usar la funcion pbzip

25_tar.sh:

#!/bin/bash

tar -cvf shell_course.tar *.sh

26_gzip.sh:

#!/bin/bash

tar -cvf shell_course.tar *.sh
gzip shell_course.tar
gzip -9 9_options.sh

27_pbzip2.sh:

#!/bin/bash

# Packaging all files of a directory
tar -cvf shell_course.tar *.sh
pbzip2 -f shell_course.tar

# Packaging a directory with tar and pbzip2
tar -cf *.sh -c > shell_course_2.tar.bz2