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 33

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 鈥渞atio y rate鈥 no son realmente lo mismo, 鈥渞ate鈥 si hace referencia a la cantidad, frecuencia o velocidad de un evento medible, sin embargo, 鈥渞atio鈥 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 鈥渞atio鈥 es 3:6, que tambi茅n es expresado como un ratio de 陆 o de 0.5鈥 deber铆a mencionar 鈥渞ata鈥, o 鈥渞ate鈥 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.

驴Por qu茅 no simplmete usar -z o -j?

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

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

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

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```

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鈥檚 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)

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.
#!/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."

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.

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.

TAR

  • TAR stands for 鈥渢ape 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.
  • 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 鈥淭est message!鈥 >> test.txt
#echo 鈥淭est 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 鈥渢est_folder_1.tar鈥 test_folder
tar -cvf 鈥渢est_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 鈥渢est_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 鈥渢est_folder_2.tar鈥 # -f.File. A new file called
#鈥渢est_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