#!/bin/bash if [ -z "$1" ]; then echo "No filename to archive provided" exit 1 elif [ -z "$2" ]; then echo "No archive directory path provided" exit 2 fi FILENAME="${1}" ARCHIVEDIR="${2}" if [ ! -z "$3" ]; then # Alternative archive filename was provided FILE="${3}" fi if [ ! -e $FILENAME ]; then echo "$FILENAME does not exist, exiting" exit 3 elif [ ! -e $ARCHIVEDIR ]; then mkdir -p $ARCHIVEDIR echo "Created $ARCHIVEDIR" fi DATETIME=$(stat -c %Y $FILENAME) if [ -e "$ARCHIVEDIR/timestamp.txt" ]; then PREV_DATETIME=$(cat "$ARCHIVEDIR/timestamp.txt") else PREV_DATETIME=0 fi if [ $DATETIME != $PREV_DATETIME ]; then # Archive the file if [ -z $FILE ]; then FILE=$(basename $FILENAME) fi TARGETFILE="${ARCHIVEDIR}/${HOSTNAME}_${DATETIME}_${FILE}" if [ ! -e "${TARGETFILE}" ] && [ ! -e "${TARGETFILE}.gz" ]; then # Only copy if archived version doesn't exist yet cp -a $FILENAME "${TARGETFILE}" gzip -9 "${TARGETFILE}" fi echo $DATETIME > "$ARCHIVEDIR/timestamp.txt" fi