• Publicidad

script para borrar respaldo antiguo

¿Eres administrador de sistemas? Este foro es para todos aquellos temas relacionados con el uso de Perl para administración de sistemas.

script para borrar respaldo antiguo

Notapor victor531 » 2013-04-12 19:19 @846

Hola amigos, soy nuevo en esto y necesito borrar unos respaldos antiguos desde un directorio y tengo este script, que me funciona en un servidor y en otro no, creo que es un problema de sintaxis, pero no logro dar con la solución y necesito su ayuda. :roll:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. for i in `ls -lt /home/respaldo    | tail -n1`
  3. do
  4. rm -rf /home/respaldo/$i
  5. done
  6.  
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4

Lo que hace es buscar el respaldo más viejo, lo selecciona y lo borra, pero al ejecutarlo me da el siguiente error
syntax error at ./borra line 5, near "do
rm"
Execution of ./borra aborted due to compilation errors.


Perdonen mi ignorancia pero no logro dar con la sintaxis correcta. :oops:

Cualquier ayuda es bien recibida.

Gracias de antemano.

Victor
victor531
Perlero nuevo
Perlero nuevo
 
Mensajes: 3
Registrado: 2013-04-12 19:05 @837

Publicidad

Re: script para borrar respaldo antiguo

Notapor explorer » 2013-04-12 21:12 @925

Bienvenido a los foros de Perl en Español, victor531.

Es normal que falle: ese código no está escrito en Perl, sino en shell.

Cambia la primera línea del programa a #!/bin/bash, en caso de que sea bash el tipo de shell que tengas instalado.

En Perl lo escribiríamos así:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use autodie;
  3.  
  4. my $dir = '/home/respaldo';
  5.  
  6. chdir $dir;                                       # entramos en el directorio
  7.  
  8. opendir DIR, '.';                                 # abrimos el directorio para leer los contenidos
  9.  
  10. @archivos = readdir DIR;                          # leemos el directorio
  11. @archivos = sort { -M $a <=> -M $b } @archivos;   # los ordenamos por fecha
  12.  
  13. unlink $archivos[-1];                             # borramos el último
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

O, de forma más abreviada:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. unlink +(sort { -M $a <=> -M $b } </home/respaldo/*>)[-1];
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
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: script para borrar respaldo antiguo

Notapor victor531 » 2013-04-13 05:31 @272

explorer..., muchísimas gracia por tu ayuda, tu solución funcionó perfectamente y ya está en uso :D .

Pero me queda una consulta que no guarda relación con Perl, ¿cómo saber qué tipo de shell tengo instalada?

Gracias nuevamente

Victor
victor531
Perlero nuevo
Perlero nuevo
 
Mensajes: 3
Registrado: 2013-04-12 19:05 @837

Re: script para borrar respaldo antiguo

Notapor Dshellnoi_Unix » 2013-04-13 07:30 @354

Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
  1. Dshellnoi$ echo  $SHELL
  2. /bin/bash
  3.  
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4



Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
  1. Dshellnoi$ cat /etc/shells
  2. # /etc/shells: valid login shells
  3. /bin/sh
  4. #/bin/dash
  5. /bin/bash
  6. #/bin/rbash
  7.  
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Avatar de Usuario
Dshellnoi_Unix
Perlero nuevo
Perlero nuevo
 
Mensajes: 48
Registrado: 2013-02-24 15:43 @696
Ubicación: Las Palmas de Gran Canaria

Re: script para borrar respaldo antiguo

Notapor victor531 » 2013-04-13 09:32 @439

Estimado, agradecido nuevamente. :D

Victor
victor531
Perlero nuevo
Perlero nuevo
 
Mensajes: 3
Registrado: 2013-04-12 19:05 @837

Re: script para borrar respaldo antiguo

Notapor pionero » 2015-10-22 13:08 @589

Hola, sigo este hilo porque tiene que ver y me gustaría hacer lo mismo pero con una conexión ftp establecida, porque mando los respaldos por ftp pero no sé cómo limitarlos. Desde ya, muchas gracias.
pionero
Perlero nuevo
Perlero nuevo
 
Mensajes: 3
Registrado: 2015-10-22 11:30 @521

Re: script para borrar respaldo antiguo

Notapor explorer » 2015-10-26 04:53 @245

Bienvenido a los foros de Perl en Español, pionero.

¿A qué te refieres con "limitarlos"?
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: script para borrar respaldo antiguo

Notapor pionero » 2015-10-26 08:56 @414

Hola, explorer, gracias por la bienvenida.

Te explico: lo que quiero es borrar el último y más viejo de los respaldos ya que se respalda todos los días y los .tgz son gigantescos.

Localmente los hago sin problemas y te adjunto el script, pero si quiero hacerlo en un directorio ftp remoto no sé cómo establecer conexión y que el script actúe sobre el mismo.

Intenté montar el directorio con curlftpfs pero me da muchos problemas y quiero independizarlo con parámetros para perl y centralizarlo.

Adjunto lo que tengo:

#----------------------------------------------------------------------------
$BK_DIR="/root/externo/"; # Directorio donde se almacenan los respaldos
$MAX_BK=1; # Cantidad máxima de respaldos a mantener
#----------------------------------------------------------------------------
#
chdir($BK_DIR);

# Borro los archivos DAILY...
@files=glob('Backup*.tgz'); # Leo todos los archivos del directorio de respaldos
@sortedFiles=sort @files; # Los ordeno alfabéticamente

#
for ($i=0; $i<($#sortedFiles + 1 - $MAX_BK); $i++) {
$filename="$BK_DIR".$sortedFiles[$i];
unlink($filename);
}
pionero
Perlero nuevo
Perlero nuevo
 
Mensajes: 3
Registrado: 2015-10-22 11:30 @521

Re: script para borrar respaldo antiguo

Notapor explorer » 2015-10-27 16:28 @728

En Perl tienes algunos módulos que te pueden ayudar en la conexión FTP.

Yo, por ejemplo, he usado mucho Net::FTP.

Por estos foros verás muchas referencias a él.

El tema es el siguiente: te conectas al servidor (con el login()). Luego vas al directorio donde están los archivos que quieres mirar. Luego haces un dir() para extraer el listado de archivos, junto con sus fechas de modificación.

Recorremos la lista, sacando el nombre de cada archivo y la fecha de su modificación. De esa manera sabemos cuál tenemos que borrar (el más grande, el más antiguo, el más feo, o la regla que quieras imponer). Lo borramos con delete().

Finalmente, cerramos la conexión.

El problema esta en la parte de obtener la fecha de modificación. Se puede hacer un bucle y ejecutar mdtm() en cada archivo, pero a lo peor el servidor FTP no lo soporta. En ese caso, no queda más remedio que hacer un listado con dir(), y extraer la información de ese texto, línea a línea.
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: script para borrar respaldo antiguo

Notapor pionero » 2015-10-29 10:05 @461

Muchas gracias, explorer, voy ver si lo puedo implementar.
pionero
Perlero nuevo
Perlero nuevo
 
Mensajes: 3
Registrado: 2015-10-22 11:30 @521


Volver a Administración

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 2 invitados

cron