Update.
[scripts.git] / freeze-dir.sh
index 375db4b..d8b249d 100755 (executable)
 #########################################################################
 
 # This command makes a backup copy of a given directory into a backup
-# directory, tags it with the date and time, and uses rsync
-# intelligent features to avoid making superfluous copies of files
-# which are already backuped.
+# directory, tags it with the date and time, and uses rsync smart use
+# of hard links to avoid unnecessary duplicates of files already
+# backuped.
 
 set -e
 
-[[ ${FREEZE_DIR} ]] || FREEZE_DIR=${HOME}/.backups
+# The default directory does not start with a period, as it may be
+# huge and should not be "hidden" from the user.
+
+[[ ${FREEZE_DIR} ]] || FREEZE_DIR=${HOME}/freezer
 
 if [[ ! -d ${FREEZE_DIR} ]]; then
     echo "Can not find directory ${FREEZE_DIR}" >&2
@@ -32,7 +35,7 @@ if [[ ! -d ${FREEZE_DIR} ]]; then
 fi
 
 while [[ "$1" ]]; do
-    real_path=$(realpath "$1")
+    real_path="$(realpath "$1")"
     dir=$(basename "${real_path}")
     path=$(dirname "${real_path}")
     full_path="${path}/${dir}"
@@ -58,18 +61,18 @@ while [[ "$1" ]]; do
     new_backup="${backup}:::${date}"
 
     if [[ -h "${current_backup}" ]]; then
-        rsync --link-dest="${current_backup}/" -axz "${full_path}/" "${new_backup}/"
-        rm -f "${current_backup}"
+        rsync --progress --link-dest="${current_backup}/" -axz "${full_path}/" "${new_backup}/"
+        rm "${current_backup}"
     else
         if [[ -a ${current_backup} ]]; then
             echo "${current_backup} exists and is not a symbolic link" >&2
             exit 1
         else
-            rsync -axz "${full_path}/" "${new_backup}/"
+            rsync --progress -axz "${full_path}/" "${new_backup}/"
         fi
     fi
 
-    ln -s "${new_backup}" "${current_backup}"
+    ln -vs "${new_backup}" "${current_backup}"
 
     sync