63 lines
2.1 KiB
Bash
Executable File
63 lines
2.1 KiB
Bash
Executable File
#!/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}" -uf "${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}" -uf "${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
|