Skip to content

Instantly share code, notes, and snippets.

@albertodeste
Last active September 16, 2019 14:11
Show Gist options
  • Save albertodeste/e50f333c3a99ffa93a59d3cbb5f61436 to your computer and use it in GitHub Desktop.
Save albertodeste/e50f333c3a99ffa93a59d3cbb5f61436 to your computer and use it in GitHub Desktop.
Smart file backup script
#!/bin/bash
cd "$(dirname "$0")"
function limit {
COUNT=$(find . -name "*.tar.gz" | wc -l)
if (( $COUNT > $1))
then
rm "$(ls -t | tail -1)"
limit $1
fi
}
function cleanup {
LIMIT=$(cat .limit)
limit "$LIMIT"
}
function changed {
LATEST_FILE=$(ls -rt | tail -1)
if [ -z $LATEST_FILE ];
then
echo 1
else
A_CONTENTS=$(tar -tvf $1 | sort)
B_CONTENTS=$(tar -tvf $LATEST_FILE | sort)
diff <(echo "$A_CONTENTS") <(echo "$B_CONTENTS") | wc -l
fi
}
pushd $1
BACKUP_TMP_FILE=$(mktemp)
BACKUP_FILE=$(tar -zcvf "$BACKUP_TMP_FILE" $2)
DATE=$(date '+%Y-%m-%d_%H-%M')
BACKUP_NAME="$DATE.tar.gz"
CHANGED=$(changed "$BACKUP_TMP_FILE")
if (( $CHANGED > 0 ))
then
echo "Differences found, saving backup"
mv "$BACKUP_TMP_FILE" "$BACKUP_NAME"
cleanup
else
echo "No differences found"
fi
popd
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment