Support for Mac OS X

This commit is contained in:
Laurent Cozic
2013-11-15 14:47:01 +08:00
parent 324a3ffc9a
commit 78003f6b94
+24 -5
View File
@@ -33,7 +33,10 @@ trap 'fn_terminate_script' SIGINT
fn_parse_date() { fn_parse_date() {
# Converts YYYY-MM-DD-HHMMSS to YYYY-MM-DD HH:MM:SS and then to Unix Epoch. # Converts YYYY-MM-DD-HHMMSS to YYYY-MM-DD HH:MM:SS and then to Unix Epoch.
date -d "${1:0:10} ${1:11:2}:${1:13:2}:${1:15:2}" +%s case "$OSTYPE" in
linux*) date -d "${1:0:10} ${1:11:2}:${1:13:2}:${1:15:2}" +%s ;;
darwin*) date -j -f "%Y-%m-%d-%H%M%S" "$1" "+%s" ;;
esac
} }
fn_find_backups() { fn_find_backups() {
@@ -49,7 +52,7 @@ fn_expire_backup() {
fi fi
fn_log_info "Expiring $1" fn_log_info "Expiring $1"
rm -rf -- "$1" echo "rm -rf -- $1"
} }
# ----------------------------------------------------------------------------- # -----------------------------------------------------------------------------
@@ -101,8 +104,17 @@ LOG_FILE="$PROFILE_FOLDER/$NOW.log"
DEST=$DEST_FOLDER/$NOW DEST=$DEST_FOLDER/$NOW
PREVIOUS_DEST=$(fn_find_backups | sort | tail -n 1) PREVIOUS_DEST=$(fn_find_backups | sort | tail -n 1)
INPROGRESS_FILE=$DEST_FOLDER/backup.inprogress INPROGRESS_FILE=$DEST_FOLDER/backup.inprogress
KEEP_ALL_DATE=$(date -d '-1 day' +%s)
KEEP_DAILIES_DATE=$(date -d '-1 month' +%s) case "$OSTYPE" in
linux*)
KEEP_ALL_DATE=$(date -d '-1 day' +%s)
KEEP_DAILIES_DATE=$(date -d '-1 month' +%s)
;;
darwin*)
KEEP_ALL_DATE=$(date -j -f "%a %b %d %T %Z %Y" "`date -v -1d`" "+%s")
KEEP_DAILIES_DATE=$(date -j -f "%a %b %d %T %Z %Y" "`date -v -1m`" "+%s")
;;
esac
# ----------------------------------------------------------------------------- # -----------------------------------------------------------------------------
# Create profile folder if it doesn't exist # Create profile folder if it doesn't exist
@@ -171,24 +183,31 @@ while [ "1" ]; do
stamp=$(fn_parse_date $date) stamp=$(fn_parse_date $date)
# Skip if failed to parse date... # Skip if failed to parse date...
# TODO: display warning
[ -n "$stamp" ] || continue [ -n "$stamp" ] || continue
if [ $stamp -ge $KEEP_ALL_DATE ]; then if [ $stamp -ge $KEEP_ALL_DATE ]; then
true true
elif [ $stamp -ge $KEEP_DAILIES_DATE ]; then elif [ $stamp -ge $KEEP_DAILIES_DATE ]; then
# Delete all but the most recent of each day. # Delete all but the most recent of each day.
if [ ${date:0:7} == ${prev:0:7} ]; then
[ ${date:8:2} -eq ${prev:8:2} ] && fn_expire_backup "$fname" [ ${date:8:2} -eq ${prev:8:2} ] && fn_expire_backup "$fname"
fi
else else
# Delete all but the most recent of each month. # Delete all but the most recent of each month.
if [ ${date:0:4} == ${prev:0:4} ]; then
[ ${date:5:2} -eq ${prev:5:2} ] && fn_expire_backup "$fname" [ ${date:5:2} -eq ${prev:5:2} ] && fn_expire_backup "$fname"
fi fi
fi
prev=$date prev=$date
done done
# ----------------------------------------------------------------------------- # -----------------------------------------------------------------------------
# Start backup # Start backup
# ----------------------------------------------------------------------------- # -----------------------------------------------------------------------------