• Publicidad

Respaldo de archivos

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

Respaldo de archivos

Notapor Prisma123 » 2012-11-18 18:12 @800

Estimados, quisiera saber si me pudieran ayudar con este trabajo que tengo:


Escribir un aplicativo Perl que realice el respaldo de los archivos que contienen programas Perl ubicados en un directorio particular (entregado por el usuario) hacia un directorio diferente también entregado por el usuario. Considere que los archivos que contienen código Perl siempre comienzan con las siguientes líneas y tienen la extensión .pl:

#!/usr/bin/perl
#file <nombre del archivo>

El programa debe verificar las siguientes condiciones y operar correctamente en cada caso:

  • El directorio de programas a respaldar y el directorio de respaldo no deben coincidir y el directorio de respaldo puede ser usado varias veces, es decir, podría existir al momento de iniciar un respaldo nuevo y tener contenido.
  • Los nombres de los archivos respaldados deben tener como prefijo la fecha del respaldo y la hora de respaldo, es decir, si un archivo llamado programa4.cl se respalda el 26 de abril del 2012 a las 18:45 horas, el nombre de la copia de respaldo debe ser del estilo 20120426.1845.programa4.pl.

El programa debe mostrar los siguientes resultados en forma ordenada al finalizar la tarea de respaldo.

  • Listado de archivos respaldados (ruta del archivo, tamaño)
  • Cantidad total de archivos respaldados.
  • Tamaño total de archivos respaldados

El código que estoy realizando es el siguiente:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2.  
  3. Printf "\t Respaldo de Archivos \t\n\n" my ( $p, $archivo, $dirperl, $line1, $line2 );
  4. printf "directorio a respaldar:\n";
  5. $dirpelr = <STDIN>;
  6. chomp($dirperl);
  7.  
  8. system("find $dirperl -name *.pl > txt.txt");
  9. open( INFILE, "txt.txt" );
  10.  
  11. while (<INFILE>) {
  12.     $p = rindex( $_, "/" );
  13.     $archivo = substr( $_, $p + 1 );
  14.  
  15.     $line1 = 'head -n1 $_';
  16.     if ( $line1 == "!/usr/bin/perl" ) {
  17.  
  18.         $line2 = `head -n2 $_ | tail -n1`;
  19.  
  20.         if ($line2=="FILE:$archivo"){
  21.             printf $_;
  22.         }
  23.     }
  24. }
Coloreado en 0.005 segundos, usando GeSHi 1.0.8.4
Prisma123
Perlero nuevo
Perlero nuevo
 
Mensajes: 3
Registrado: 2012-10-10 13:31 @605

Publicidad

Re: Respaldo de archivos

Notapor explorer » 2012-11-18 19:17 @845

Hay varios errores en el código...

  • línea 3 y siguientes has escrito 'Printf' y 'printf', cuando la mayor parte de las ocasiones lo puedes resolver con un print() o un say()
  • te faltan algunos caracteres ';' en algunas líneas
  • las comparaciones entre cadenas de caracteres no se hacen con el operador '==', si no con el operador 'eq'
  • te faltaba alguna llave de cierre '}'
  • Muchas de las operaciones externas que llamas con system() y comillas invertidas se pueden realizar con el propio Perl. Quizás necesites más líneas pero el resultado será independiente de la existencia o no de los comandos externos
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: Respaldo de archivos

Notapor Prisma123 » 2012-11-19 13:52 @619

Estimado:

Corregí los errores mencionados, no sé si me pudieras ayudar con el resto del código que falta, dado que no se me ocurre cómo poder continuar para lograr los pasos descritos anteriormente.

Agradecido
Prisma123
Perlero nuevo
Perlero nuevo
 
Mensajes: 3
Registrado: 2012-10-10 13:31 @605


Volver a Básico

¿Quién está conectado?

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