8 nov 2013

Bash Scripting: Backup & Yesterday Practices (Bash Boys!)

Hoy volvemos a hablar sobre problemas propuestos hace años, en épocas universitarias. Anteriormente, hemos visto el problema del ICMP y la conectividad de máquinas mediante el uso de scripting en bash. El problema que se propone en este caso es uno doble, por un lado deberemos dar solución a la realización de backups y en segundo lugar, como recuperar la información de éste.

Problema tipo:

Escriba un script llamado "backup.sh" que, dado un directorio, cree untar comprimido (.tgz) usando tar(1) con un nombre que codifique elnombre del directorio, la fecha de creación y un número automático quedesambigüe en el nombre.

Escriba un script llamado "yesterday.sh" que, dado un número de díasimprima el comando necesario para recuperar el backup de ese día.Ejemplo:

$ backup.sh fich

generará un fichero fich_232113_1.tgz

$ backup.sh fich

generará el fichero fich_232113_2.tgz

Dos días después:

yesterday.sh -n 2 fichimprimirá dos líneas indicando cómo descomprimir en el sitio adecuadofich_232113_1.tgzyfich_232113_2.tgz

Nuestra solución:

En primer lugar se comprueba que los parámetros introducidos al script son correctos en número. Por otro lado, se comprueba que el parámetro introducido, del que se quiere realizar el backup, sea un directorio. Se prepara una variable con el formato de fecha que se quiere utilizar en el nombre del archivo de backup.

Una vez se tiene esto preparado se comprueba que el fichero de backup con formato de fecha no existe, y en caso de ser cierto se realiza el backup (primero de dicho día para ese directorio). Si por el contrario, el fichero existe se comprueba cuantos ficheros de esa fecha y ese directorio existe y se almacena en la variable count. Después se incrementa dicha variable y se realiza el backup del directorio con el formato de fecha y el número correspondiente. Realmente sencilla la generación del backup del directorio.

Por otro lado, tenemos que realizar un script para recuperar los ficheros del día que solicitemos en los parámetros de entrada. En primer lugar, y tras realizar las comprobaciones de entrada y de que el tercer parámetro existe, se captura el formado de fecha del apartado anterior. Después se realiza la resta de días y se prepara el formato anterior. En este punto se puede obtener el listado de ficheros correspondientes a dicho día.

Esto es una solución al problema, totalmente mejorable, y os animamos a qué realicéis las mejoras oportunas. Nosotros mientras tanto, seguiremos proponiendo problemas y soluciones a los típicos problemas de nuestra época.

Saludos!

3 comentarios:

  1. [...] viernes Pablo nos trajo una nueva entrega de  Bash Scripting: Backup & Yesterday Practices (Bash Boys!). Un artículo muy útil para los administradores de [...]

    ResponderEliminar
  2. [...] hablaremos de las llamadas al sistema que todos hemos utilizado en el lenguaje de programación C. Anteriormente hemos hablado de bash, el scripting que nos ayuda en tareas cotidianas de administración y del cual un administrador [...]

    ResponderEliminar
  3. Hola!
    Muy concisas y entendibles las soluciones, gracias por compartirlas.
    Tan sólo comentar que para asignar valor a una variable a partir de otra, no es necesario el comando 'echo'.
    Por ejemplo, en el caso de: resta=$(echo 0$resta), valdría simplemente con resta=0$resta.
    Por otro lado, es recomendable encerrar las asignaciones entre comillas para evitar sorpresas cuando hay espacios en la cadena almacenada en la variable, símbolos raros, tabuladores, etc. ;-)
    Así, en ese ejemplo quedaría: resta="0$resta"
    Saludos!

    ResponderEliminar