backup.sh 909 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. ##!/usr/bin/env bash
  2. set -euo pipefail
  3. DATE="$(date +%F_%H%M%S)"
  4. SCRIPT_NAME="${0##*/}"
  5. LOG_DIR="${HOME}/.local/share/logs"
  6. LOG_FILE="${LOG_DIR}/${SCRIPT_NAME%%.sh}_${DATE}.log"
  7. display_help() {
  8. error_message="$*"
  9. [[ -n ${error_message:-} ]] && echo -e "Error: ${error_message}\n"
  10. cat <<EOF
  11. Description: backup files or directories
  12. Usage: ${SCRIPT_NAME} [optional arg/s] <mandatory arg/s>
  13. Dependencies: tar, gunzip
  14. Examples:
  15. - ${SCRIPT_NAME} <directory or file>
  16. EOF
  17. exit 2
  18. }
  19. message(){
  20. info="$*"
  21. echo "==== $(date +'%F_%H%M%S') ==== ${info} ====" | tee -a "$LOG_FILE"
  22. }
  23. [[ $# -ne 1 ]] && display_help
  24. mkdir -pv "$LOG_DIR"
  25. ln -rsf "$LOG_DIR" "$HOME"
  26. input_file="$1"
  27. ARC="${input_file}.tar.gz"
  28. TAR_OPTS=(-cavf "$ARC")
  29. if [[ -d $input_file ]]; then
  30. TAR_OPTS+=(-C "$input_file" .)
  31. else
  32. TAR_OPTS+=(-C $(dirname $input_file) $(basename $input_file))
  33. fi
  34. tar "${TAR_OPTS[@]}"