Tutorial de Shell Scripting Parte 10

Tutorial de Shell Scripting Parte 10

Temario para este Tutorial

 

Parte 10: Mi Script en BASH

Introducción

En esta última parte del tutorial, vamos a combinar todo lo que hemos aprendido para crear un script en Bash que será útil para desarrolladores y administradores de sistemas Linux. El script realizará un backup incremental de un directorio, verificará permisos de los archivos, comparará si los archivos han sido modificados y registrará todas las actividades en un archivo de log.

Descripción del Script

El script realizará las siguientes acciones:

  • Verificará si los directorios de origen y backup existen.
  • Comprobará si los archivos del directorio de origen han sido modificados desde el último backup.
  • Copiará solo los archivos modificados o nuevos al directorio de backup.
  • Verificará que los archivos tengan permisos de lectura antes de copiarlos.
  • Registrará todas las actividades realizadas en un archivo de log.

Código del Script


#!/bin/bash

# Directorios de origen y backup
origen="/ruta/a/tu/directorio_origen"
backup="/ruta/a/tu/directorio_backup"
log_file="/ruta/a/tu/log_backup.txt"

# Verificar si los directorios de origen y backup existen
if [ ! -d "$origen" ]; then
    echo "El directorio de origen $origen no existe." | tee -a "$log_file"
    exit 1
fi

if [ ! -d "$backup" ]; then
    echo "El directorio de backup $backup no existe. Creando directorio..." | tee -a "$log_file"
    mkdir -p "$backup"
fi

# Fecha y hora actual para el log
fecha=$(date "+%Y-%m-%d %H:%M:%S")

echo "==== Backup iniciado el $fecha ====" | tee -a "$log_file"

# Recorrer los archivos en el directorio de origen
for archivo in "$origen"/*; do
    nombre_archivo=$(basename "$archivo")
    archivo_backup="$backup/$nombre_archivo"

    # Verificar si el archivo tiene permisos de lectura
    if [ ! -r "$archivo" ]; then
        echo "El archivo $nombre_archivo no tiene permisos de lectura. Saltando..." | tee -a "$log_file"
        continue
    fi

    # Verificar si el archivo es más reciente que el de backup o si no existe en el backup
    if [ ! -f "$archivo_backup" ] || [ "$archivo" -nt "$archivo_backup" ]; then
        echo "Copiando archivo modificado o nuevo: $nombre_archivo" | tee -a "$log_file"
        cp "$archivo" "$archivo_backup"
    else
        echo "El archivo $nombre_archivo no ha sido modificado." | tee -a "$log_file"
    fi
done

# Fin del proceso de backup
echo "==== Backup completado el $(date "+%Y-%m-%d %H:%M:%S") ====" | tee -a "$log_file"

Explicación del Script

  • Verificación de directorios: El script comienza verificando si los directorios de origen y de backup existen. Si el directorio de backup no existe, el script lo crea automáticamente.
  • Verificación de permisos de lectura: Para cada archivo en el directorio de origen, se verifica que tenga permisos de lectura antes de copiarlo al directorio de backup.
  • Comparación de archivos: El script compara los archivos del directorio de origen con los del directorio de backup. Si un archivo ha sido modificado o es nuevo, se copia al directorio de backup. Si no ha sido modificado, el script lo omite.
  • Registro de actividades: Todas las acciones, como la copia de archivos o los errores (como la falta de permisos de lectura), se registran en un archivo de log con la fecha y hora.

Personalización

Puedes personalizar este script cambiando las rutas de los directorios de origen y backup, y adaptarlo a tus necesidades. Por ejemplo, puedes agregarle la opción de compresión para crear archivos tar o zip con los archivos respaldados.

Conclusión

¡Felicidades! Has creado un script útil que pone en práctica todo lo aprendido en este tutorial de Bash. Este script puede ser utilizado por desarrolladores o administradores de sistemas para realizar backups incrementales de manera eficiente y segura.

Próximos Pasos

Este es el fin del tutorial de scripting en Bash. Si te ha gustado, ¡no dudes en compartirlo o dejar un comentario! Tu apoyo es valioso para seguir creando más contenido útil para la comunidad de desarrolladores y administradores de sistemas.