Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 1 de 1
 
 
---Compresión De Archivos---
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje ---Compresión De Archivos--- 
 
Hola, gambas!
Me han mandado a crear un shell script de compresión de archivos que tome un archivo cualquiera y lo comprima con algún algoritmo de compresión que de como resultado el menor numero de bytes posibles. (mejorcompresion.sh)


Los algoritmos de compresión que debo usar son bzip2, zip, gzip y compress.

La idea es que pase algo así:

mejorcompresion.sh hola.txt

La mejor compresión es zip.
Archivo resultante: hola.txt.zip

En el caso de que ninguna compresión sea menor que el archivo original debe quedarse en su estado original.

Los archivos resultantes deben ser:

*.Z si es compress
*.bz2 si es bzip2
*.gz si es gzip
*.zip si es zip

La verdad ez que soy nuevo en esto, y bueno, estoy un poco atareado con esta actividad.
¿Alguien podría echarme una mano?
 



 
última edición por Edgardo el Domingo, 22 Noviembre 2015, 03:56; editado 1 vez 
Edgardo - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: ---Compresión De Archivos--- 
 
BIenvenido Edgardo.

Antes de nada comentarte que no se deben duplicar los mensajes en dos foros.
Supongo que lo harías por las dos distintas posibilidades.

Si hablas de .sh hablas de Shell script, si quieres hacerlo en gambas, hazlo en Gambas.
Supongo que no vas a crear el algoritmo de cero. Solamente vas a usar un tipo de compresor.

Si lo haces en Gambas:

Tendrás que usar la orden externa Shell o Exec. (Ver el manual de gambas)
Debes plantearte algún tipo de algoritmo que te sea fácil a ti de entender, sin usar ningún lenguaje.

- Saber la longitud del archivo original. ( Repasa el comando Stat en la ayuda online de gambas). http://gambaswiki.org/wiki/lang/stat?l=es
- Con cada compresor realizar la misma operación.
- Comprimir el archivo original
- Conocer la longitud del archivo comprimido
- Añadir el resultado en algún lugar que haga referencia al compresor usado. Un array por ejemplo, o a tantas variables como compresores uses.
- Elegir el compresor adecuado según el radio de compresión, comparando el radio de compresión de los distintos compresores con el tamaño del archivo original.

Saludos
 




===================
Gambas Básico
“Si no puedes explicar algo de forma sencilla, entonces es que tú no lo entiendes bien.” Albert Einstein
 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: ---Compresión De Archivos--- 
 
Bienvenido, Edgardo

Tras echar un vistazo a los manuales de las herramientas de compresión, veo que no hay posibilidad de "simular" la compresión para poder compararlas entre sí.

De manera que no queda más remedio que realizar la compresión real con cada programa y luego comparar los tamaños. Hecho esto, de deberían borrar los ficheros comprimidos que no interesen.

Como ejercicio lo veo sencillo, aunque bastante ineficaz ya que obliga a realizar el proceso con cada utilidad de compresión, con el tiempo y consumo de recursos que ello conlleva. En cualquier caso, como tienes que crear un script bash, lo primero es crear un fichero vacío con extensión .sh y colocarle como primera línea el shebang de bash:

#!/usr/bin/env bash


Para saber cómo usar los comandos de compresión, usa el manual de linux para cada programa desde la consola:

man tar
man zip,
etc

Para salir del manual tienes que pulsar "q".

Otra lectura interesante es algún libro sobre bash, donde se explique el uso de variables, argumentos, funciones y estructuras de control para poder hacer comparaciones. Bash es un lenguaje potentísimo que además puede utilizar a su vez infinidad de órdenes (otros programas de consola) para realizar todo lo que te propongas.

Otro recurso muy interesante es ésta página: http://www.commandlinefu.com/commands/browse en la que puedes buscar scripts cortos para hacer una determinada tarea.

Resumiendo, haz un esquema sobre papel de cómo y en qué orden deben suceder las cosas, dividiendo el problema global en varios problemas más pequeños que irás solucionando por orden. No pases al siguiente hasta haber solucionado el anterior y por último, compón el script final uniendo cada solución parcial. Recuerda usar variables para guardar los tamaños de los ficheros y luego poder compararlas.

Y recuerda que Google es tu amigo, y como decían en Matrix: "No existen preguntas sin respuesta, sólo preguntas mal formuladas."

Te dejo un manual rápido y sencillo en español para empezar en bash: https://docs.google.com/file/d/0B4F...dit?usp=sharing


Saludos
 




===================
Jesús Guardón

Por favor, usemos el corrector ortográfico antes de pulsar el botón "Enviar".

"uo ǝs ʇɐu pıɟıɔıן ɐdɹǝupǝɹ ɐ dɹoƃɹɐɯɐɹ, soןo ɥɐʎ bnǝ dɹodouǝɹsǝןo"
 
jguardon - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: ---Compresión De Archivos--- 
 
Hey, gracias por su ayuda, la verdad me ha ayudado a hacer algo, pero aun sigo si poder lograr la actividad final!
y, perdon por el  duplicado, en ese momento mi internet se fue y pensé que no se había publicado.

Jguardon, coloqué el codigo para hacer la compresión real de cada archivo, pero este no me lee más que las dos primeras compresiones. Las dos siguientes me da un mensaje de error diciendo que "$archivo no se puede comprimir porque no es un archivo u directorio"

                                                                                  ----Esto es lo que coloqué----

#!/bin/bash
clear

echo -e "Mejor Compreion de Archivos \n"

echo -e "Los archivos resultantes podran ser, bzip2, zip, gzip y compress"

read -p "¿Introduce el nombre de tu archivo?:" archivo

echo -e "\n"

zip= zip -r $archivo.zip $archivo
bzip2= bzip2 $archivo
gzip= gzip -q $archivo
compress= compress $archivo

-------------------------------------------------------------------------------------------------


Al poder lograr lo anterior, quisiera saber si hay alguna forma de aplicar lo siguiente:

if
  [ $(stat -c%s $archivo.zip) -ge $(stat -c%s $archivo.bz2) ]
then
   echo -e "Los archivos que ocupan menos espacio son bzip2 y \n"
else
   echo -e "Los archivos que ocupan menos espacio  zip y \n"
fi

if
  [ $(stat -c%s $archivo.gz) -ge $(stat -c%s $archivo.Z) ]
   echo -e "gzip \n"
else
   echo -e "compress \n"
fi


Lo intenté, pero creo que me dió error por la misma razón.    
---------------------------------------------------------------------------------------------
Para terminar y eliminar los ficheros restantes, apliqué lo siguiente:
(Tomando en cuenta que existen 12 distintas posibilidades, pero 'else' lo disminuye a 6, por los 4 compresores.)

read -p "¿Desea eliminar los archivos comprimidos que ocupan mayor espacio? s/n:" delete

until [ "$delete" = "s" ]
do

#1
if [ $(stat -c%s $archivo.zip) -ge $(stat -c%s $archivo.bz2) ]
then
   rm "$archivo.zip"
   rm "$archivo.gz"
   rm "$archivo.Z"
else
   rm "$archivo.bz2"
   rm "$archivo.gz"
   rm "$archivo.Z"
fi

#2
if [ $(stat -c%s $archivo.zip) -ge $(stat -c%s $archivo.gz) ]
then
    rm "$archivo.zip"
    rm "$archivo.bz2"
    rm "$archivo.Z"
else
    rm "$archivo.gz"
    rm "$archivo.bz2"
    rm "$archivo.Z"
fi

#3
if [ $(stat -c%s $archivo.gz) -ge $(stat -c%s $archivo.bz2) ]
then
    rm "$archivo.gz"
    rm "$archivo.Z"
    rm "$archivo.zip"
else
    rm "$archivo.bz2"
    rm "$archivo.Z"
    rm "$archivo.zip"
fi

#4
if [ $(stat -c%s $archivo.zip) -ge $(stat -c%s $archivo.Z) ]
then
    rm "$archivo.zip"
    rm "$archivo.bz2"
    rm "$archivo.gz"
else
    rm "$archivo.Z"
    rm "$archivo.bz2"
    rm "$archivo.gz"

#5
if [ $(stat -c%s $archivo.gz) -ge $(stat -c%s $archivo.Z) ]
then
     rm "$archivo.gz"
     rm "$archivo.bz2"
     rm "$archivo.gz"
else
     rm "$archivo.Z"
     rm "$archivo.bz2"
     rm "$archivo.gz"
fi

#6
if [ $(stat -c%s $archivo.bz2) -ge $(stat -c%s $archivo.Z) ]
then
     rm "$archivo.bz2"
     rm "$archivo.gz"
     rm "$archivo.zip"
else
     rm "$archivo.Z"
     rm "$archivo.gz"
     rm "archivo.zip"
fi
done


GRACIAS!
 



 
Edgardo - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Mostrar mensajes anteriores:    
 
Ocultar¡Este tema fue útil?

 

Elegir valoración:                       

Media de valoración Valoración mínima Valoración máxima Número de valoraciones
0.00 0 0 0
 
OcultarTemas parecidos
Tema Autor Foro Respuestas último mensaje
No hay nuevos mensajes Compresión/Descompresión De Archivos En ... soplo General 0 Lunes, 21 Septiembre 2009, 21:31 Ver último mensaje
soplo
No hay nuevos mensajes Analizar Archivos PDF tincho Aplicaciones/Fragmentos de Código 11 Jueves, 09 Agosto 2018, 13:25 Ver último mensaje
tincho
No hay nuevos mensajes Archivos Parche angelnu General 2 Viernes, 26 Enero 2018, 21:03 Ver último mensaje
angelnu
No hay nuevos mensajes Buscador De Archivos drjuano Aplicaciones/Fragmentos de Código 1 Miercoles, 24 Abril 2013, 09:57 Ver último mensaje
Shell
 

Publicar nuevo tema  Responder al tema  Página 1 de 1
 

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado
Usuarios registrados conectados: Ninguno


 
Lista de permisos
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
No puede descargar archivos
No puede publicar eventos en el calendario