#!/bin/bash # Comprueba los parametros if [ "$#" -ne 1 ]; then printf "Uso: %s FILE_NAME\n" "$(basename "$0")" exit 0 else # Comprueba si existe el fichero if ! test -f "$1"; then printf "File %s does not exist.\n" "$1" exit 0 fi fi # Variables FILE_DIR="$(cd "$(dirname "$1")" && pwd)" readonly FILE_DIR FILE_NAME="$(basename "$1")" readonly FILE_NAME SUFFIX=".tar.gz" readonly SUFFIX # Crea una copia del fichero y le añade al nombre la fecha OLD_DATE="$(date -r "$1" "+%Y-%m-%d_%H:%M:%S")" cp "${FILE_DIR}/${FILE_NAME}" "${FILE_DIR}/${FILE_NAME}.${OLD_DATE}" # Añade la copia del fichero al fichero .tar.gz o crea uno nuevo if ! test -f "${FILE_DIR}/${FILE_NAME}${SUFFIX}"; then tar -C "${FILE_DIR}" -caf "${FILE_DIR}/${FILE_NAME}${SUFFIX}" "${FILE_NAME}.${OLD_DATE}" printf "File %s${SUFFIX} created.\n" "${FILE_NAME}" else gunzip "${FILE_DIR}/${FILE_NAME}${SUFFIX}" tar -C "${FILE_DIR}" -uaf "${FILE_DIR}/${FILE_NAME}.tar" "${FILE_NAME}.${OLD_DATE}" gzip "${FILE_DIR}/${FILE_NAME}.tar" fi printf "%s\n" "${FILE_NAME}.${OLD_DATE} added" rm "${FILE_DIR}/${FILE_NAME}.${OLD_DATE}" # Comprueba cada cierto tiempo si el fichero se ha modificado while true; do sleep 60 # Obten la fecha del fichero DATE="$(date -r "$1" "+%Y-%m-%d_%H:%M:%S")" # Si la fecha del fichero ha cambiado respecto a la que tenia almacenada es porque es una versión # nueva del fichero y se procede a hacer una copia en el fichero .tar.gz if [ "$DATE" != "$OLD_DATE" ]; then # Crea una copia del fichero y le añade al nombre la fecha cp "${FILE_DIR}/${FILE_NAME}" "${FILE_DIR}/${FILE_NAME}.${DATE}" # Añade la copia del fichero al fichero .tar.gz gunzip "${FILE_DIR}/${FILE_NAME}${SUFFIX}" tar -C "${FILE_DIR}" -uaf "${FILE_DIR}/${FILE_NAME}.tar" "${FILE_NAME}.${DATE}" gzip "${FILE_DIR}/${FILE_NAME}.tar" # Elimina la copia del fichero rm "${FILE_DIR}/${FILE_NAME}.${DATE}" # Actualiza la fecha del fichero a la de la última copia OLD_DATE=$DATE # Informa por pantalla printf "%s\n" "${FILE_NAME}.${DATE} added" fi done