• Publicidad

Comprimir directorio

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Comprimir directorio

Notapor Camilein » 2012-10-24 14:48 @658

Hola nuevamente a todos, he aquí con otra tarea.

En esta ocasión debo comprimir un directorio el cual puedo ingresar por parámetro, o en su defecto se comprimirá el directorio indicado. Además al terminar de comprimir debe moverlo a otra ubicación.

Hasta ahí todo bonito, el detalle es que cuando reviso el directorio comprimido, está el directorio pero no los archivos que contiene en su interior... ¿Qué estoy haciendo mal...? ¿O qué es lo que me falta?

Aquí va lo que tengo de código.

Saludos

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2.  
  3.  
  4.  
  5. #use strict;
  6. use Archive::Zip qw( :ERROR_CODES :CONSTANTS );
  7. my $comprimido = Archive::Zip->new();
  8.  
  9. my $directorio = @ARGV[0];
  10. if ( @ARGV < 1){
  11.         $directorio = "~/Escritorio/"
  12. }
  13.  
  14.  
  15. #Generar fecha
  16. my @meses = qw (enero febrero marzo abril mayo junio julio agosto septiembre octubre noviembre diciembre);
  17. my @dias = qw(Domingo Lunes Martes Miercoles Jueves Viernes Sabado);
  18. my($segundos,$minutos,$hora,$diaMes,$mes,$anio,$diaSemana,$diaAnio, $horarioInvierno) = localtime();
  19.  
  20. my $anio = 1900 + $anio; #normalizar el año
  21. my $ahora = "$diaMes".$meses[$mes]."$anio";
  22. #Fin generar fecha
  23.  
  24. #agregamos el directorio a comprimir
  25. my $dir_member = $comprimido->addDirectory($directorio);
  26.  
  27. #se hace un split a la ruta del archivo y se guardan en un arreglo los elementos
  28. my @dir = split("/",$directorio);
  29.  
  30. #le asignamos el nombre de la carpeta o archivo(q seria el ultimo elemento del arreglo)
  31. #,a una variable, usando pop (pop extrae el ultimo elemento de un arreglo y disminuye el numero de este en 1)
  32. my $nombre =pop(@dir);
  33.  
  34. #a la variable archivo se le asigna el nombre que va a tener el archivo comprimido
  35. #primero va $nombre, q vendria a ser el nombre del directorio, y al final va $ahora, que es la fecha actual
  36. my $archivo = $nombre.'_resp_'.$ahora.'.zip';
  37.  
  38. #se guarda el archivo comprimido
  39. unless ($comprimido->writeToFileNamed($archivo) == AZ_OK){
  40.         die 'Error';
  41. }
  42.  
  43. #movemos el archivo comprimido resultante a la carpeta correspondiente (respaldos)
  44. my $antigua_ubic = $directorio.'_resp_'.$ahora.'.zip';
  45. print "$antigua_ubic \n";
  46. my $nueva_ubic = "/home/camilo/respaldos/$archivo";
  47. print "$nueva_ubic \n";
  48. rename $antigua_ubic,$nueva_ubic;
  49.  
  50.  
  51.  
Coloreado en 0.004 segundos, usando GeSHi 1.0.8.4
Camilein
Perlero nuevo
Perlero nuevo
 
Mensajes: 6
Registrado: 2012-09-26 14:07 @630

Publicidad

Re: Comprimir directorio

Notapor explorer » 2012-10-24 15:09 @673

addDirectory() solo añade una entrada al zip, con la marca de directorio, pero no guarda ningún contenido (al principio del manual lo dice).

Lo que necesitas es usar un método de mayor nivel, como addTree().

Consulta la sección Zip Archive Tree operations de Archive::Zip.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Comprimir directorio

Notapor Camilein » 2012-10-24 18:34 @815

Okas, un millón de gracias, justo estaba leyendo el manual.

Se agradece.
Camilein
Perlero nuevo
Perlero nuevo
 
Mensajes: 6
Registrado: 2012-09-26 14:07 @630

Re: Comprimir directorio

Notapor pvaldes » 2012-10-25 15:37 @692

¿O Archive::Tar y luego comprimir el archivo?
pvaldes
Perlero nuevo
Perlero nuevo
 
Mensajes: 129
Registrado: 2011-01-22 12:56 @580


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: Bing [Bot] y 28 invitados