From 63a1669221378d30e03d4a3bcea3f71382837726 Mon Sep 17 00:00:00 2001 From: Michael Soh <2767724+sohmc@users.noreply.github.com> Date: Sun, 22 Dec 2024 15:20:01 -0500 Subject: [PATCH 01/19] committing so that I can work on it elsewhere --- backup | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/backup b/backup index 4371e5a..07c71c6 100644 --- a/backup +++ b/backup @@ -13,10 +13,13 @@ ## - In order to use the upload feature, rclone must be installed and have at least one cloud service setup in config. ## ------------------------------------ ## -## Usage: backup [-n ] [-s ] [-e ]... [-u ] [-p ] [-r] [-y] [-v] +## Usage: backup [-n ] [-n ] [-l ] [-s ] [-e ]... [-u ] [-p ] [-r] [-y] [-v] ## ## Options: ## -n Sets the tar.gz file name [default: "backup"] +## -d Sets date command format [default: "%Y/%m/%d %T" ie: "2024-03-05 07:01:53"] +## -l Incremental backup mode: Adds 'level' to the filename. +## If the number is greater than 0, an incremental backup is performed. ## -s Path to which the generated backup file will be saved to [default: current working directory] ## -e Exclude a pattern (specific files / folders) from being backed up ## -u rclone path to which the backup file will be uploaded to (not providing one will skip the upload process) @@ -44,6 +47,8 @@ REMOVE_LOCAL=false # Boolean - Remove local backup file after upload. SKIP_WARNINGS=false # Boolean - Skip warnings. VERBOSE=false # Boolean - Use verbose mode when running tar and rclone. PUSHBULLET_TITLE="Backup Script" # Pusbullet - Notification title. +DATE_FORMAT='%Y%m%d-%H%M%S' +INCREMENTAL_LEVEL=0 PUSHBULLET_MESSAGE_START="Backup script " # Pushbullet - Notification messages will start with this string, followed by one of the followings: PUSHBULLET_MESSAGE_FINISHED_SUCCESS="finished successfully." # Pusbullet - Message will be shown if the script ran successfully. PUSHBULLET_MESSAGE_FINISHED_ERRORS="finished with errors." # Pusbullet - Message will be shown if the script finished with errors. @@ -70,6 +75,12 @@ while getopts ":n:e:s:u:p:ryvh" arg; do n) BACKUP_NAME=${OPTARG} ;; + d) + DATE_FORMAT=${OPTARG} + ;; + l) + INCREMENTAL_LEVELq=${OPTARG} + ;; e) EXCLUDES+=("${OPTARG}") ;; From c00495821a8764f97205cd7f3dbb2b351758df35 Mon Sep 17 00:00:00 2001 From: Michael Soh <2767724+sohmc@users.noreply.github.com> Date: Sun, 22 Dec 2024 16:19:51 -0500 Subject: [PATCH 02/19] refactored $VERBOSE so that commands aren't duplicated --- backup | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/backup b/backup index 07c71c6..e388cbd 100644 --- a/backup +++ b/backup @@ -168,8 +168,10 @@ EXCLUEDS_FILE=$(mktemp /tmp/backup.XXXXXX.txt) if [ ! ${#EXCLUDES[@]} -eq 0 ]; then printf "%s\n" "${EXCLUDES[@]}" > "$EXCLUEDS_FILE"; fi # run tar with or without '-v', according to VERBOSE value -if [ "$VERBOSE" = true ]; then tar -cvzf "$SAVE_FOLDER/$FILENAME" -C "$BACKUP_FOLDER/.." -X $EXCLUEDS_FILE "$(basename "$BACKUP_FOLDER")"; \ -else tar -czf "$SAVE_FOLDER/$FILENAME" -C "$BACKUP_FOLDER/.." -X $EXCLUEDS_FILE "$(basename "$BACKUP_FOLDER")"; fi +VERBOSE_FLAG=""; +if [ "$VERBOSE" = true ]; then VERBOSE_FLAG="-v"; + +tar -cz VERBOSE_FLAG -f "$SAVE_FOLDER/$FILENAME" -C "$BACKUP_FOLDER/.." -X $EXCLUEDS_FILE "$(basename "$BACKUP_FOLDER")"; # remove temporary file rm $EXCLUEDS_FILE @@ -190,7 +192,7 @@ fi if [ -n "$RCLONE_FOLDER" ]; then echo -e "$(date +"%Y/%m/%d %T") ${C3}Uploading backup file to ${C4}$RCLONE_FOLDER${C0}" # run rclone with or without '-v', according to VERBOSE value - if [ "$VERBOSE" = true ]; then rclone copy "$SAVE_FOLDER/$FILENAME" -v "$RCLONE_FOLDER"; else rclone copy "$SAVE_FOLDER/$FILENAME" "$RCLONE_FOLDER"; fi + rclone copy "$SAVE_FOLDER/$FILENAME" $VERBOSE_FLAG "$RCLONE_FOLDER" # rclone commmand finished successfully (exit code = 0) if [ "$?" = 0 ]; then echo -e "$(date +"%Y/%m/%d %T") ${C1}Backup file uploaded successfully${C0}" From 475f1aa51773da3cd92490c3853b1c1aeac346d2 Mon Sep 17 00:00:00 2001 From: Michael Soh <2767724+sohmc@users.noreply.github.com> Date: Sun, 22 Dec 2024 17:08:57 -0500 Subject: [PATCH 03/19] Corrected spelling of "excludes" --- backup | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/backup b/backup index e388cbd..0b3d31a 100644 --- a/backup +++ b/backup @@ -164,17 +164,17 @@ fi echo -e "$(date +"%Y/%m/%d %T") ${C3}Generating tar.gz file"${C0} FILENAME="${BACKUP_NAME}-$(date +%FT%H%M).tar.gz" # generate a temporary file to store EXCLUDES in -EXCLUEDS_FILE=$(mktemp /tmp/backup.XXXXXX.txt) -if [ ! ${#EXCLUDES[@]} -eq 0 ]; then printf "%s\n" "${EXCLUDES[@]}" > "$EXCLUEDS_FILE"; fi +EXCLUDES_FILE=$(mktemp /tmp/backup.XXXXXX.txt) +if [ ! ${#EXCLUDES[@]} -eq 0 ]; then printf "%s\n" "${EXCLUDES[@]}" > "$EXCLUDES_FILE"; fi # run tar with or without '-v', according to VERBOSE value VERBOSE_FLAG=""; if [ "$VERBOSE" = true ]; then VERBOSE_FLAG="-v"; -tar -cz VERBOSE_FLAG -f "$SAVE_FOLDER/$FILENAME" -C "$BACKUP_FOLDER/.." -X $EXCLUEDS_FILE "$(basename "$BACKUP_FOLDER")"; +tar -cz VERBOSE_FLAG -f "$SAVE_FOLDER/$FILENAME" -C "$BACKUP_FOLDER/.." -X $EXCLUDES_FILE "$(basename "$BACKUP_FOLDER")"; # remove temporary file -rm $EXCLUEDS_FILE +rm $EXCLUDES_FILE # tar commmand finished successfully (exit code = 0) if [ "$?" = 0 ]; then From 82091e1744cacdd16b1f9095cf19d96a8333b8ff Mon Sep 17 00:00:00 2001 From: Michael Soh <2767724+sohmc@users.noreply.github.com> Date: Sun, 22 Dec 2024 19:01:59 -0500 Subject: [PATCH 04/19] Added incremental flag as well as some defaults --- backup | 41 +++++++++++++++++++++++++++++++++++++---- 1 file changed, 37 insertions(+), 4 deletions(-) diff --git a/backup b/backup index 0b3d31a..f80aaf1 100644 --- a/backup +++ b/backup @@ -48,7 +48,7 @@ SKIP_WARNINGS=false # Boolean - Skip warnings. VERBOSE=false # Boolean - Use verbose mode when running tar and rclone. PUSHBULLET_TITLE="Backup Script" # Pusbullet - Notification title. DATE_FORMAT='%Y%m%d-%H%M%S' -INCREMENTAL_LEVEL=0 +INCREMENTAL_LEVEL=-1 PUSHBULLET_MESSAGE_START="Backup script " # Pushbullet - Notification messages will start with this string, followed by one of the followings: PUSHBULLET_MESSAGE_FINISHED_SUCCESS="finished successfully." # Pusbullet - Message will be shown if the script ran successfully. PUSHBULLET_MESSAGE_FINISHED_ERRORS="finished with errors." # Pusbullet - Message will be shown if the script finished with errors. @@ -79,7 +79,7 @@ while getopts ":n:e:s:u:p:ryvh" arg; do DATE_FORMAT=${OPTARG} ;; l) - INCREMENTAL_LEVELq=${OPTARG} + INCREMENTAL_LEVEL=${OPTARG} ;; e) EXCLUDES+=("${OPTARG}") @@ -106,6 +106,12 @@ while getopts ":n:e:s:u:p:ryvh" arg; do echo " Usage: $(basename $0) [-n ] [-s ] [-e ]... [-u ] [-p ] [-r] [-y] [-v] Options: -n Sets the tar.gz file name [default: "backup"] + -d Sets date command format [default: "%Y/%m/%d %T" ie: "2024-03-05 07:01:53"] + -l Incremental backup mode: Adds 'level' to the filename. + If the number is greater than 0, an incremental backup is performed. + Full backups are performed by default (and when a snar file does not exist), + but indicating a level will create a snar file that will store data + necessary to perform future backups. -s Path to which the generated backup file will be saved to [default: current working directory] -e Exclude a pattern (specific files / folders) from being backed up -u rclone path to which the backup file will be uploaded to (not providing one will skip the upload process) @@ -160,18 +166,45 @@ if [ "$REMOVE_LOCAL" = true ] && [ -z "$RCLONE_FOLDER" ] && [] "$SKIP_WARNINGS" if [[ ! $REPLY =~ ^[Yy]$ ]]; then exit 0; fi fi +# Create Kebabed folder name so that we can use it as a file name +KEBAB-BACKUP_FOLDER=${BACKUP_FOLDER//\//-}; +# Remove dashes or dots if they are in the front of the kebab +KEBAB_BACKUP_FOLDER=${KEBAB_BACKUP_FOLDER##+([-.])}; + +# if INCREMENTAL_LEVEL is GTE 0, enable incremental label +INCREMENTAL_LABEL=""; +INCREMENTAL_FLAG=""; +if [ ${INCREMENTAL_LEVEL} >= 0 ]; then + SNAR_FILE=$HOME/.cache/tar/${KEBAB_BACKUP_FOLDER}.snar + INCREMENTAL_LABEL="-level${INCREMENTAL_LEVEL}"; + INCREMENTAL_FLAG="--listed-incremental ${SNAR_FILE}"; +fi + # ----- tar ----- echo -e "$(date +"%Y/%m/%d %T") ${C3}Generating tar.gz file"${C0} -FILENAME="${BACKUP_NAME}-$(date +%FT%H%M).tar.gz" +FILENAME="${BACKUP_NAME}-$(date +${DATE_FORMAT})${INCREMENTAL_LABEL}.tar.gz" +echo -e "$(date +"%Y/%m/%d %T") ${C3}tar FILENAME: ${FILENAME}"${C0} # generate a temporary file to store EXCLUDES in EXCLUDES_FILE=$(mktemp /tmp/backup.XXXXXX.txt) if [ ! ${#EXCLUDES[@]} -eq 0 ]; then printf "%s\n" "${EXCLUDES[@]}" > "$EXCLUDES_FILE"; fi +# Include default.exclude if it exists +if [ -f $HOME/.config/tar/default.exclude ]; then + echo -e "$(date +"%Y/%m/%d %T") ${C3} Default exclude file found. Adding to excludes..."${C0} + cat $HOME/.config/tar/default.exclude >> "$EXCLUDES_FILE"; +fi +# Include a {kebabbed}.exclude if it exists +if [ -f $HOME/.config/tar/$KEBAB_BACKUP_FOLDER.exclude ]; then + echo -e "$(date +"%Y/%m/%d %T") ${C3} Exclude file for ${KEBAB_BACKUP_FOLDER} found. Adding to excludes..."${C0} + cat $HOME/.config/tar/$KEBAB_BACKUP_FOLDER.exclude >> "$EXCLUDES_FILE"; +fi + + # run tar with or without '-v', according to VERBOSE value VERBOSE_FLAG=""; if [ "$VERBOSE" = true ]; then VERBOSE_FLAG="-v"; -tar -cz VERBOSE_FLAG -f "$SAVE_FOLDER/$FILENAME" -C "$BACKUP_FOLDER/.." -X $EXCLUDES_FILE "$(basename "$BACKUP_FOLDER")"; +tar -cz $VERBOSE_FLAG -f "$SAVE_FOLDER/$FILENAME" $INCREMENTAL_FLAG -C "$BACKUP_FOLDER/.." -X $EXCLUDES_FILE "$(basename "$BACKUP_FOLDER")"; # remove temporary file rm $EXCLUDES_FILE From 627f0a447274883aa36370e0c4be0cc75b1c3f94 Mon Sep 17 00:00:00 2001 From: Michael Soh <2767724+sohmc@users.noreply.github.com> Date: Sun, 22 Dec 2024 21:20:30 -0500 Subject: [PATCH 05/19] looks like incremential is now working! --- backup | 33 ++++++++++++++++++++------------- 1 file changed, 20 insertions(+), 13 deletions(-) diff --git a/backup b/backup index f80aaf1..b13604b 100644 --- a/backup +++ b/backup @@ -70,7 +70,7 @@ C2='\033[1;31m' # ANSI - error - red C3='\033[0;36m' # ANSI - information - cyan C4='\033[0;33m' # ANSI - variables/paths - orange -while getopts ":n:e:s:u:p:ryvh" arg; do +while getopts ":n:d:l:e:s:u:p:ryvh" arg; do case $arg in n) BACKUP_NAME=${OPTARG} @@ -167,23 +167,30 @@ if [ "$REMOVE_LOCAL" = true ] && [ -z "$RCLONE_FOLDER" ] && [] "$SKIP_WARNINGS" fi # Create Kebabed folder name so that we can use it as a file name -KEBAB-BACKUP_FOLDER=${BACKUP_FOLDER//\//-}; +KEBAB_BACKUP_FOLDER=${BACKUP_FOLDER//\//-} # Remove dashes or dots if they are in the front of the kebab -KEBAB_BACKUP_FOLDER=${KEBAB_BACKUP_FOLDER##+([-.])}; - +shopt -s extglob +KEBAB_BACKUP_FOLDER="${KEBAB_BACKUP_FOLDER##+([.-])}" +shopt -u extglob # if INCREMENTAL_LEVEL is GTE 0, enable incremental label -INCREMENTAL_LABEL=""; -INCREMENTAL_FLAG=""; -if [ ${INCREMENTAL_LEVEL} >= 0 ]; then - SNAR_FILE=$HOME/.cache/tar/${KEBAB_BACKUP_FOLDER}.snar - INCREMENTAL_LABEL="-level${INCREMENTAL_LEVEL}"; - INCREMENTAL_FLAG="--listed-incremental ${SNAR_FILE}"; +INCREMENTAL_LABEL="" +INCREMENTAL_FLAG="" +if [ ${INCREMENTAL_LEVEL} -ge 0 ]; then + echo $KEBAB_BACKUP_FOLDER + SNAR_FILE=$HOME/.cache/tar/$KEBAB_BACKUP_FOLDER.snar + INCREMENTAL_LABEL="-level${INCREMENTAL_LEVEL}" + INCREMENTAL_FLAG="--listed-incremental=${SNAR_FILE}" + + if [ ! -d $HOME/.config/tar ]; then + echo -e "$(date +"%Y/%m/%d %T") ${C3}Creating ${4}$HOME/.config/tar ${C3} directory"${C0} + mkdir -p $HOME/.config/tar + fi fi # ----- tar ----- echo -e "$(date +"%Y/%m/%d %T") ${C3}Generating tar.gz file"${C0} FILENAME="${BACKUP_NAME}-$(date +${DATE_FORMAT})${INCREMENTAL_LABEL}.tar.gz" -echo -e "$(date +"%Y/%m/%d %T") ${C3}tar FILENAME: ${FILENAME}"${C0} +echo -e "$(date +"%Y/%m/%d %T") ${C3}tar FILENAME: ${C4}${FILENAME}"${C0} # generate a temporary file to store EXCLUDES in EXCLUDES_FILE=$(mktemp /tmp/backup.XXXXXX.txt) if [ ! ${#EXCLUDES[@]} -eq 0 ]; then printf "%s\n" "${EXCLUDES[@]}" > "$EXCLUDES_FILE"; fi @@ -191,7 +198,7 @@ if [ ! ${#EXCLUDES[@]} -eq 0 ]; then printf "%s\n" "${EXCLUDES[@]}" > "$EXCLUDES # Include default.exclude if it exists if [ -f $HOME/.config/tar/default.exclude ]; then echo -e "$(date +"%Y/%m/%d %T") ${C3} Default exclude file found. Adding to excludes..."${C0} - cat $HOME/.config/tar/default.exclude >> "$EXCLUDES_FILE"; + cat $HOME/.config/tar/default.exclude >> "$EXCLUDES_FILE"; fi # Include a {kebabbed}.exclude if it exists if [ -f $HOME/.config/tar/$KEBAB_BACKUP_FOLDER.exclude ]; then @@ -202,7 +209,7 @@ fi # run tar with or without '-v', according to VERBOSE value VERBOSE_FLAG=""; -if [ "$VERBOSE" = true ]; then VERBOSE_FLAG="-v"; +if [ "$VERBOSE" = true ]; then VERBOSE_FLAG="-v"; fi tar -cz $VERBOSE_FLAG -f "$SAVE_FOLDER/$FILENAME" $INCREMENTAL_FLAG -C "$BACKUP_FOLDER/.." -X $EXCLUDES_FILE "$(basename "$BACKUP_FOLDER")"; From a45c4defd06e402e7d0f974e84e07b677c446c86 Mon Sep 17 00:00:00 2001 From: Michael Soh <2767724+sohmc@users.noreply.github.com> Date: Mon, 23 Dec 2024 16:46:19 -0500 Subject: [PATCH 06/19] Added logic to delete the snar file if the incremental level is 0 --- backup | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/backup b/backup index b13604b..4ac746d 100644 --- a/backup +++ b/backup @@ -185,6 +185,11 @@ if [ ${INCREMENTAL_LEVEL} -ge 0 ]; then echo -e "$(date +"%Y/%m/%d %T") ${C3}Creating ${4}$HOME/.config/tar ${C3} directory"${C0} mkdir -p $HOME/.config/tar fi + + if [ ${INCREMENTAL_LEVEL} -eq 0 ] && [ -f $SNAR_FILE ]; then + echo -e "$(date +"%Y/%m/%d %T") ${C3}Incremental Level set to 0 and snar file ${4}${SNAR_FILE} ${C3} exists. Deleting..."${C0} + rm $SNAR_FILE + fi fi # ----- tar ----- From 9be7404a277e6179170945dc967ca47fe3a9c984 Mon Sep 17 00:00:00 2001 From: Michael Soh <2767724+sohmc@users.noreply.github.com> Date: Mon, 23 Dec 2024 16:46:29 -0500 Subject: [PATCH 07/19] Updated documentation --- README.md | 8 ++++++- backup | 11 ++++++---- changelog.md | 6 +++++ default.exclude | 58 +++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 78 insertions(+), 5 deletions(-) create mode 100644 default.exclude diff --git a/README.md b/README.md index 28a614e..83125dc 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ A Bash script to generate a tar.gz backup of a folder, with an option to automatically upload the backup file to a cloud service using [rclone](https://github.com/rclone/rclone). List of cloud/storage providers currently supported by rclone can be found [here](https://github.com/rclone/rclone#storage-providers).
-Latest version: 1.2.0 ([changelog](https://github.com/MichaelYochpaz/Backup-Script/blob/master/changelog.md)) +Latest version: 1.3.0 ([changelog](https://github.com/MichaelYochpaz/Backup-Script/blob/master/changelog.md)) ## Features * Generate a tar.gz backup file of a folder. @@ -27,6 +27,12 @@ or using command-line arguments (will override configuration that's set on on th Options: -n Sets the tar.gz file name [default: "backup"] + -d Sets date command format [default: "%Y/%m/%d %T" ie: "2024-03-05 07:01:53"] + -l Incremental backup mode: Adds 'level' to the filename. + If the number is greater than 0, an incremental backup is performed. + Full backups are performed by default (and when a snar file does not exist), + but indicating a level will create a snar file that will store data + necessary to perform future backups. -s Path to which the generated backup file will be saved to [default: current working directory] -e Exclude a pattern (specific files / folders) from being backed up -u rclone path to which the backup file will be uploaded to (not providing one will skip the upload process) diff --git a/backup b/backup index 4ac746d..5556844 100644 --- a/backup +++ b/backup @@ -13,13 +13,16 @@ ## - In order to use the upload feature, rclone must be installed and have at least one cloud service setup in config. ## ------------------------------------ ## -## Usage: backup [-n ] [-n ] [-l ] [-s ] [-e ]... [-u ] [-p ] [-r] [-y] [-v] +## Usage: backup [-n ] [-d ] [-l ] [-s ] [-e ]... [-u ] [-p ] [-r] [-y] [-v] ## ## Options: ## -n Sets the tar.gz file name [default: "backup"] ## -d Sets date command format [default: "%Y/%m/%d %T" ie: "2024-03-05 07:01:53"] ## -l Incremental backup mode: Adds 'level' to the filename. ## If the number is greater than 0, an incremental backup is performed. +## Full backups are performed by default (and when a snar file does not exist), +## but indicating a level will create a snar file that will store data +## necessary to perform future backups. ## -s Path to which the generated backup file will be saved to [default: current working directory] ## -e Exclude a pattern (specific files / folders) from being backed up ## -u rclone path to which the backup file will be uploaded to (not providing one will skip the upload process) @@ -47,7 +50,7 @@ REMOVE_LOCAL=false # Boolean - Remove local backup file after upload. SKIP_WARNINGS=false # Boolean - Skip warnings. VERBOSE=false # Boolean - Use verbose mode when running tar and rclone. PUSHBULLET_TITLE="Backup Script" # Pusbullet - Notification title. -DATE_FORMAT='%Y%m%d-%H%M%S' +DATE_FORMAT='%Y/%m/%d %T' INCREMENTAL_LEVEL=-1 PUSHBULLET_MESSAGE_START="Backup script " # Pushbullet - Notification messages will start with this string, followed by one of the followings: PUSHBULLET_MESSAGE_FINISHED_SUCCESS="finished successfully." # Pusbullet - Message will be shown if the script ran successfully. @@ -55,7 +58,7 @@ PUSHBULLET_MESSAGE_FINISHED_ERRORS="finished with errors." # Pusbullet - Message PUSHBULLET_MESSAGE_FAIL="failed." # Pusbullet - Message will be shown if the script has failed. ## ------------------------------------ -usage() { echo "Usage: $(basename $0) [-n ] [-s ] [-e ]... [-u ] [-p ] [-r] [-y] [-v] +usage() { echo "Usage: $(basename $0) [-n ] [-d ] [-l ] [-s ] [-e ]... [-u ] [-p ] [-r] [-y] [-v] Use $(basename $0) -h for additional info."; exit 1; } # if there is a Pushbullet API key, send a Pushbullet notification. uses a parameter for message's body @@ -103,7 +106,7 @@ while getopts ":n:d:l:e:s:u:p:ryvh" arg; do VERBOSE=true ;; h) - echo " Usage: $(basename $0) [-n ] [-s ] [-e ]... [-u ] [-p ] [-r] [-y] [-v] + echo " Usage: $(basename $0) [-n ] [-d ] [-l ] [-s ] [-e ]... [-u ] [-p ] [-r] [-y] [-v] Options: -n Sets the tar.gz file name [default: "backup"] -d Sets date command format [default: "%Y/%m/%d %T" ie: "2024-03-05 07:01:53"] diff --git a/changelog.md b/changelog.md index 6c0174e..147d422 100644 --- a/changelog.md +++ b/changelog.md @@ -1,6 +1,12 @@ # Changelog All notable changes to the script will be documented here +## 1.3.0 - [2024-12-23] +* Added feature to set your own `date` format via `-d` argument, followed by a valid format +* Added feature to do incremential backups via the `-l` argument followed by an integer zero or greater +* Script will look for a default exclude list, which is provided within this repo that's been shamelessly copied from [Timeshift](https://github.com/linuxmint/timeshift/blob/07f5589ecd1ff07036fa4a813292a2b5f51baefd/src/Core/Main.vala#L538) +* Relatedly, the script will look for an exclude list for your dataset. Exclude files are stored in $HOME/.config/tar/${DATASET_NAME}.exclude. Dataset name is derived by replacing slashes in the dataset name with a dash, removing any dots or dashes in the beginning of the dataset name. Best way to use this is to provide the absolute path for the dataset. + ## 1.2.0 - [2020-06-18] * Added Pushbullet notifications support using the `-p` argument * Added `-y` argument to skip warnings (which by default, require user input to continue) diff --git a/default.exclude b/default.exclude new file mode 100644 index 0000000..d1390ea --- /dev/null +++ b/default.exclude @@ -0,0 +1,58 @@ +/dev/* +/proc/* +/sys/* +/media/* +/mnt/* +/tmp/* +/run/* +/var/run/* +/var/lock/* +/var/lib/dhcpcd/* +/var/lib/docker/* +/var/lib/schroot/* +/lost+found +/timeshift/* +/timeshift-btrfs/* +/data/* +/DATA/* +/cdrom/* +/sdcard/* +/system/* +/etc/timeshift.json +/var/log/timeshift/* +/var/log/timeshift-btrfs/* +/swapfile +/snap/* +/root/.thumbnails +/root/.cache +/root/.dbus +/root/.gvfs +/root/.local/share/[Tt]rash +/home/*/.thumbnails +/home/*/.cache +/home/*/.dbus +/home/*/.gvfs +/home/*/.local/share/[Tt]rash +/home/*/.thumbnails +/home/*/.cache +/home/*/.dbus +/home/*/.gvfs +/home/*/.local/share/[Tt]rash +/root/.mozilla/firefox/*.default/Cache +/root/.mozilla/firefox/*.default/OfflineCache +/root/.opera/cache +/root/.kde/share/apps/kio_http/cache +/root/.kde/share/cache/http +/home/*/.mozilla/firefox/*.default/Cache +/home/*/.mozilla/firefox/*.default/OfflineCache +/home/*/.opera/cache +/home/*/.kde/share/apps/kio_http/cache +/home/*/.kde/share/cache/http +/var/cache/apt/archives/* +/var/cache/pacman/pkg/* +/var/cache/yum/* +/var/cache/dnf/* +/var/cache/eopkg/* +/var/cache/xbps/* +/var/cache/zypp/* +/var/cache/edb/* \ No newline at end of file From 4c44906c56ccc1a123ea014520f743b416b7ace1 Mon Sep 17 00:00:00 2001 From: Michael Soh <2767724+sohmc@users.noreply.github.com> Date: Mon, 23 Dec 2024 17:17:03 -0500 Subject: [PATCH 08/19] Fixed directory creation And forgot to update the usage in README --- README.md | 3 ++- backup | 6 +++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 83125dc..9cdb09e 100644 --- a/README.md +++ b/README.md @@ -23,7 +23,7 @@ Latest version: 1.3.0 ([changelog](https://github.com/MichaelYochpaz/Backup-Scri Configuration can be set on the script file under the "Configuration" section, or using command-line arguments (will override configuration that's set on on the script). ``` - Usage: backup [-n ] [-s ] [-e ]... [-u ] [-r] [-v] + Usage: backup [-n ] [-d ] [-l ] [-s ] [-e ]... [-u ] [-p ] [-r] [-y] [-v] Options: -n Sets the tar.gz file name [default: "backup"] @@ -48,6 +48,7 @@ or using command-line arguments (will override configuration that's set on on th backup "/home/user/important_stuff" backup -u "GDrive:/Backups" -r -y -p "XXXXXXXXXXXXXXXX" "/home/user/important_stuff/" backup -n "important-stuff-backup" -s "/home/user/backups" -e "*.pdf" -e "important_stuff/dont_backup_this_folder" "/home/user/important_stuff/" + backup -l 0 -s /mnt/backup /home/michael ``` ## FAQ diff --git a/backup b/backup index 5556844..af31f17 100644 --- a/backup +++ b/backup @@ -184,9 +184,9 @@ if [ ${INCREMENTAL_LEVEL} -ge 0 ]; then INCREMENTAL_LABEL="-level${INCREMENTAL_LEVEL}" INCREMENTAL_FLAG="--listed-incremental=${SNAR_FILE}" - if [ ! -d $HOME/.config/tar ]; then - echo -e "$(date +"%Y/%m/%d %T") ${C3}Creating ${4}$HOME/.config/tar ${C3} directory"${C0} - mkdir -p $HOME/.config/tar + if [ ! -d $HOME/.cache/tar ]; then + echo -e "$(date +"%Y/%m/%d %T") ${C3}Creating ${4}$HOME/.cache/tar ${C3} directory"${C0} + mkdir -p $HOME/.cache/tar fi if [ ${INCREMENTAL_LEVEL} -eq 0 ] && [ -f $SNAR_FILE ]; then From 2557541c7f2b6d8dfea43b80de81ed7fcdde3566 Mon Sep 17 00:00:00 2001 From: Michael Soh <2767724+sohmc@users.noreply.github.com> Date: Mon, 23 Dec 2024 17:19:52 -0500 Subject: [PATCH 09/19] My date format --- backup | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/backup b/backup index 5556844..cbba3cb 100644 --- a/backup +++ b/backup @@ -50,7 +50,7 @@ REMOVE_LOCAL=false # Boolean - Remove local backup file after upload. SKIP_WARNINGS=false # Boolean - Skip warnings. VERBOSE=false # Boolean - Use verbose mode when running tar and rclone. PUSHBULLET_TITLE="Backup Script" # Pusbullet - Notification title. -DATE_FORMAT='%Y/%m/%d %T' +DATE_FORMAT='%Y%m%d-%H%M%S' INCREMENTAL_LEVEL=-1 PUSHBULLET_MESSAGE_START="Backup script " # Pushbullet - Notification messages will start with this string, followed by one of the followings: PUSHBULLET_MESSAGE_FINISHED_SUCCESS="finished successfully." # Pusbullet - Message will be shown if the script ran successfully. @@ -275,4 +275,4 @@ else echo -e "$(date +"%Y/%m/%d %T") ${C2}Script finished with errors${C0}" pushbullet "$PUSHBULLET_MESSAGE_FINISHED_ERRORS" exit 1 -fi \ No newline at end of file +fi From 88a2ecce627c4aaf8bc1288c29d360b7796cf5b6 Mon Sep 17 00:00:00 2001 From: Michael Soh <2767724+sohmc@users.noreply.github.com> Date: Mon, 23 Dec 2024 17:39:57 -0500 Subject: [PATCH 10/19] removed debugging echo statement --- backup | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/backup b/backup index af31f17..23d7057 100644 --- a/backup +++ b/backup @@ -179,18 +179,17 @@ shopt -u extglob INCREMENTAL_LABEL="" INCREMENTAL_FLAG="" if [ ${INCREMENTAL_LEVEL} -ge 0 ]; then - echo $KEBAB_BACKUP_FOLDER SNAR_FILE=$HOME/.cache/tar/$KEBAB_BACKUP_FOLDER.snar INCREMENTAL_LABEL="-level${INCREMENTAL_LEVEL}" INCREMENTAL_FLAG="--listed-incremental=${SNAR_FILE}" if [ ! -d $HOME/.cache/tar ]; then - echo -e "$(date +"%Y/%m/%d %T") ${C3}Creating ${4}$HOME/.cache/tar ${C3} directory"${C0} + echo -e "$(date +"%Y/%m/%d %T") ${C3}Creating ${C4}$HOME/.cache/tar ${C3} directory"${C0} mkdir -p $HOME/.cache/tar fi if [ ${INCREMENTAL_LEVEL} -eq 0 ] && [ -f $SNAR_FILE ]; then - echo -e "$(date +"%Y/%m/%d %T") ${C3}Incremental Level set to 0 and snar file ${4}${SNAR_FILE} ${C3} exists. Deleting..."${C0} + echo -e "$(date +"%Y/%m/%d %T") ${C3}Incremental Level set to 0 and snar file ${C4}${SNAR_FILE} ${C3} exists. Deleting..."${C0} rm $SNAR_FILE fi fi From ba717990e8e1d2879575a20bd743f0a883ccfe15 Mon Sep 17 00:00:00 2001 From: Michael Soh <2767724+sohmc@users.noreply.github.com> Date: Mon, 23 Dec 2024 18:29:17 -0500 Subject: [PATCH 11/19] added myself as a contributor --- backup | 1 + 1 file changed, 1 insertion(+) diff --git a/backup b/backup index 23d7057..f29ce59 100644 --- a/backup +++ b/backup @@ -1,6 +1,7 @@ #!/bin/bash ## ------------------------------------ ## Made By: Michael Yochpaz (C) 2020 +## Contributor: Michael Soh (github:sohmc) ## https://github.com/MichaelYochpaz/Backup-Script ## Version: 1.2.0 ## License: GPLv3 From 0f3dec3eaf48e72819a6bda74ffc00a94ab8c5a1 Mon Sep 17 00:00:00 2001 From: Michael Soh <2767724+sohmc@users.noreply.github.com> Date: Mon, 23 Dec 2024 18:33:35 -0500 Subject: [PATCH 12/19] variablized filenames to remove redundancy --- backup | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/backup b/backup index f29ce59..bba3c6b 100644 --- a/backup +++ b/backup @@ -184,9 +184,10 @@ if [ ${INCREMENTAL_LEVEL} -ge 0 ]; then INCREMENTAL_LABEL="-level${INCREMENTAL_LEVEL}" INCREMENTAL_FLAG="--listed-incremental=${SNAR_FILE}" - if [ ! -d $HOME/.cache/tar ]; then - echo -e "$(date +"%Y/%m/%d %T") ${C3}Creating ${C4}$HOME/.cache/tar ${C3} directory"${C0} - mkdir -p $HOME/.cache/tar + TAR_CACHE=$HOME/.cache/tar + if [ ! -d $ ]; then + echo -e "$(date +"%Y/%m/%d %T") ${C3}Creating ${C4}$TAR_CACHE ${C3} directory"${C0} + mkdir -p $TAR_CACHE fi if [ ${INCREMENTAL_LEVEL} -eq 0 ] && [ -f $SNAR_FILE ]; then @@ -204,14 +205,16 @@ EXCLUDES_FILE=$(mktemp /tmp/backup.XXXXXX.txt) if [ ! ${#EXCLUDES[@]} -eq 0 ]; then printf "%s\n" "${EXCLUDES[@]}" > "$EXCLUDES_FILE"; fi # Include default.exclude if it exists -if [ -f $HOME/.config/tar/default.exclude ]; then +DEFAULT_EXCLUDE=$HOME/.config/tar/default.exclude +if [ -f $DEFAULT_EXCLUDE ]; then echo -e "$(date +"%Y/%m/%d %T") ${C3} Default exclude file found. Adding to excludes..."${C0} - cat $HOME/.config/tar/default.exclude >> "$EXCLUDES_FILE"; + cat $DEFAULT_EXCLUDE >> "$EXCLUDES_FILE"; fi # Include a {kebabbed}.exclude if it exists -if [ -f $HOME/.config/tar/$KEBAB_BACKUP_FOLDER.exclude ]; then +KEBAB_BACKUP_FOLDER_EXCLUDE=$HOME/.config/tar/$KEBAB_BACKUP_FOLDER.exclude +if [ -f $KEBAB_BACKUP_FOLDER_EXCLUDE ]; then echo -e "$(date +"%Y/%m/%d %T") ${C3} Exclude file for ${KEBAB_BACKUP_FOLDER} found. Adding to excludes..."${C0} - cat $HOME/.config/tar/$KEBAB_BACKUP_FOLDER.exclude >> "$EXCLUDES_FILE"; + cat $KEBAB_BACKUP_FOLDER_EXCLUDE >> "$EXCLUDES_FILE"; fi From d1c33c094d517ea8107f1d987d13f28bb7d6a3e7 Mon Sep 17 00:00:00 2001 From: Michael Soh <2767724+sohmc@users.noreply.github.com> Date: Mon, 23 Dec 2024 18:38:44 -0500 Subject: [PATCH 13/19] added code brackets around the filename --- changelog.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/changelog.md b/changelog.md index 147d422..be48a16 100644 --- a/changelog.md +++ b/changelog.md @@ -5,7 +5,7 @@ All notable changes to the script will be documented here * Added feature to set your own `date` format via `-d` argument, followed by a valid format * Added feature to do incremential backups via the `-l` argument followed by an integer zero or greater * Script will look for a default exclude list, which is provided within this repo that's been shamelessly copied from [Timeshift](https://github.com/linuxmint/timeshift/blob/07f5589ecd1ff07036fa4a813292a2b5f51baefd/src/Core/Main.vala#L538) -* Relatedly, the script will look for an exclude list for your dataset. Exclude files are stored in $HOME/.config/tar/${DATASET_NAME}.exclude. Dataset name is derived by replacing slashes in the dataset name with a dash, removing any dots or dashes in the beginning of the dataset name. Best way to use this is to provide the absolute path for the dataset. +* Relatedly, the script will look for an exclude list for your dataset. Exclude files are stored in `$HOME/.config/tar/$DATASET_NAME.exclude`. Dataset name is derived by replacing slashes in the dataset name with a dash, removing any dots or dashes in the beginning of the dataset name. Best way to use this is to provide the absolute path for the dataset. ## 1.2.0 - [2020-06-18] * Added Pushbullet notifications support using the `-p` argument From 06bb3e710520bdf3d1094d8c45c59fecc60fb5f2 Mon Sep 17 00:00:00 2001 From: Michael Soh <2767724+sohmc@users.noreply.github.com> Date: Sat, 28 Dec 2024 14:26:22 -0500 Subject: [PATCH 14/19] Added additional logic to incremental backups And removed leading slash in exclude since tar uses relative paths --- backup | 16 +++++-- default.exclude | 117 ++++++++++++++++++++++++------------------------ 2 files changed, 71 insertions(+), 62 deletions(-) diff --git a/backup b/backup index bba3c6b..a434fd2 100644 --- a/backup +++ b/backup @@ -180,18 +180,26 @@ shopt -u extglob INCREMENTAL_LABEL="" INCREMENTAL_FLAG="" if [ ${INCREMENTAL_LEVEL} -ge 0 ]; then - SNAR_FILE=$HOME/.cache/tar/$KEBAB_BACKUP_FOLDER.snar + TAR_CACHE=$HOME/.cache/tar + SNAR_FILE=$TAR_CACHE/$KEBAB_BACKUP_FOLDER.snar INCREMENTAL_LABEL="-level${INCREMENTAL_LEVEL}" INCREMENTAL_FLAG="--listed-incremental=${SNAR_FILE}" - TAR_CACHE=$HOME/.cache/tar - if [ ! -d $ ]; then + echo -e "$(date +"%Y/%m/%d %T") ${C3}Incremental level set to $INCREMENTAL_LEVEL"${C0} + + if [ ! -d $TAR_CACHE ]; then echo -e "$(date +"%Y/%m/%d %T") ${C3}Creating ${C4}$TAR_CACHE ${C3} directory"${C0} mkdir -p $TAR_CACHE fi + if [ -f $SNAR_FILE ]; + then echo -e "$(date +"%Y/%m/%d %T") ${C3}snar file ${C4}$SNAR_FILE ${C3} found"${C0} + else + echo -e "$(date +"%Y/%m/%d %T") ${C3}snar file ${C4}$SNAR_FILE ${C3} not found. It will be created and a full backup will be performed."${C0} + fi + if [ ${INCREMENTAL_LEVEL} -eq 0 ] && [ -f $SNAR_FILE ]; then - echo -e "$(date +"%Y/%m/%d %T") ${C3}Incremental Level set to 0 and snar file ${C4}${SNAR_FILE} ${C3} exists. Deleting..."${C0} + echo -e "$(date +"%Y/%m/%d %T") ${C3}Incremental Level set to 0 and snar file exists. Deleting..."${C0} rm $SNAR_FILE fi fi diff --git a/default.exclude b/default.exclude index d1390ea..206c227 100644 --- a/default.exclude +++ b/default.exclude @@ -1,58 +1,59 @@ -/dev/* -/proc/* -/sys/* -/media/* -/mnt/* -/tmp/* -/run/* -/var/run/* -/var/lock/* -/var/lib/dhcpcd/* -/var/lib/docker/* -/var/lib/schroot/* -/lost+found -/timeshift/* -/timeshift-btrfs/* -/data/* -/DATA/* -/cdrom/* -/sdcard/* -/system/* -/etc/timeshift.json -/var/log/timeshift/* -/var/log/timeshift-btrfs/* -/swapfile -/snap/* -/root/.thumbnails -/root/.cache -/root/.dbus -/root/.gvfs -/root/.local/share/[Tt]rash -/home/*/.thumbnails -/home/*/.cache -/home/*/.dbus -/home/*/.gvfs -/home/*/.local/share/[Tt]rash -/home/*/.thumbnails -/home/*/.cache -/home/*/.dbus -/home/*/.gvfs -/home/*/.local/share/[Tt]rash -/root/.mozilla/firefox/*.default/Cache -/root/.mozilla/firefox/*.default/OfflineCache -/root/.opera/cache -/root/.kde/share/apps/kio_http/cache -/root/.kde/share/cache/http -/home/*/.mozilla/firefox/*.default/Cache -/home/*/.mozilla/firefox/*.default/OfflineCache -/home/*/.opera/cache -/home/*/.kde/share/apps/kio_http/cache -/home/*/.kde/share/cache/http -/var/cache/apt/archives/* -/var/cache/pacman/pkg/* -/var/cache/yum/* -/var/cache/dnf/* -/var/cache/eopkg/* -/var/cache/xbps/* -/var/cache/zypp/* -/var/cache/edb/* \ No newline at end of file +dev/* +proc/* +sys/* +media/* +mnt/* +tmp/* +run/* +var/run/* +var/lock/* +var/lib/dhcpcd/* +var/lib/docker/* +var/lib/schroot/* +lost+found +timeshift/* +timeshift-btrfs/* +data/* +DATA/* +cdrom/* +sdcard/* +system/* +etc/timeshift.json +var/log/timeshift/* +var/log/timeshift-btrfs/* +swapfile +snap/* +root/.thumbnails +root/.cache +root/.dbus +root/.gvfs +root/.local/share/[Tt]rash +home/*/.thumbnails +home/*/.cache +home/*/.dbus +home/*/.gvfs +home/*/.local/share/[Tt]rash +home/*/.thumbnails +home/*/.cache +home/*/.dbus +home/*/.gvfs +home/*/.local/share/[Tt]rash +root/.mozilla/firefox/*.default/Cache +root/.mozilla/firefox/*.default/OfflineCache +root/.opera/cache +root/.kde/share/apps/kio_http/cache +root/.kde/share/cache/http +home/*/.mozilla/firefox/*.default/Cache +home/*/.mozilla/firefox/*.default/OfflineCache +home/*/.vscode-server +home/*/.opera/cache +home/*/.kde/share/apps/kio_http/cache +home/*/.kde/share/cache/http +var/cache/apt/archives/* +var/cache/pacman/pkg/* +var/cache/yum/* +var/cache/dnf/* +var/cache/eopkg/* +var/cache/xbps/* +var/cache/zypp/* +var/cache/edb/* \ No newline at end of file From 451dc1e672b401894d95cdecb03b9ba759f1a9c2 Mon Sep 17 00:00:00 2001 From: Michael Soh <2767724+sohmc@users.noreply.github.com> Date: Sat, 28 Dec 2024 14:30:13 -0500 Subject: [PATCH 15/19] updated date format documenation --- README.md | 2 +- backup | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 9cdb09e..65fd1bf 100644 --- a/README.md +++ b/README.md @@ -27,7 +27,7 @@ or using command-line arguments (will override configuration that's set on on th Options: -n Sets the tar.gz file name [default: "backup"] - -d Sets date command format [default: "%Y/%m/%d %T" ie: "2024-03-05 07:01:53"] + -d Sets date command format [default: "%FT%H%M" ie: "2024-03-05T0701"] -l Incremental backup mode: Adds 'level' to the filename. If the number is greater than 0, an incremental backup is performed. Full backups are performed by default (and when a snar file does not exist), diff --git a/backup b/backup index a434fd2..daf220a 100644 --- a/backup +++ b/backup @@ -18,7 +18,7 @@ ## ## Options: ## -n Sets the tar.gz file name [default: "backup"] -## -d Sets date command format [default: "%Y/%m/%d %T" ie: "2024-03-05 07:01:53"] +## -d Sets date command format [default: "%FT%H%M" ie: "2024-03-05T0701"] ## -l Incremental backup mode: Adds 'level' to the filename. ## If the number is greater than 0, an incremental backup is performed. ## Full backups are performed by default (and when a snar file does not exist), @@ -110,7 +110,7 @@ while getopts ":n:d:l:e:s:u:p:ryvh" arg; do echo " Usage: $(basename $0) [-n ] [-d ] [-l ] [-s ] [-e ]... [-u ] [-p ] [-r] [-y] [-v] Options: -n Sets the tar.gz file name [default: "backup"] - -d Sets date command format [default: "%Y/%m/%d %T" ie: "2024-03-05 07:01:53"] + -d Sets date command format [default: "%FT%H%M" ie: "2024-03-05T0701"] -l Incremental backup mode: Adds 'level' to the filename. If the number is greater than 0, an incremental backup is performed. Full backups are performed by default (and when a snar file does not exist), From 2e181cae1bcd8d061ccd3cd50e5c56ac809a831b Mon Sep 17 00:00:00 2001 From: Michael Soh <2767724+sohmc@users.noreply.github.com> Date: Wed, 1 Jan 2025 06:18:09 -0500 Subject: [PATCH 16/19] removed some whitespacing --- backup | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) mode change 100644 => 100755 backup diff --git a/backup b/backup old mode 100644 new mode 100755 index 9303c77..fe59177 --- a/backup +++ b/backup @@ -193,9 +193,9 @@ if [ ${INCREMENTAL_LEVEL} -ge 0 ]; then fi if [ -f $SNAR_FILE ]; - then echo -e "$(date +"%Y/%m/%d %T") ${C3}snar file ${C4}$SNAR_FILE ${C3} found"${C0} + then echo -e "$(date +"%Y/%m/%d %T") ${C3}snar file ${C4}$SNAR_FILE ${C3}found"${C0} else - echo -e "$(date +"%Y/%m/%d %T") ${C3}snar file ${C4}$SNAR_FILE ${C3} not found. It will be created and a full backup will be performed."${C0} + echo -e "$(date +"%Y/%m/%d %T") ${C3}snar file ${C4}$SNAR_FILE ${C3}not found. It will be created and a full backup will be performed."${C0} fi if [ ${INCREMENTAL_LEVEL} -eq 0 ] && [ -f $SNAR_FILE ]; then From 15902451754a79e6399d583875df902fd1fa95f7 Mon Sep 17 00:00:00 2001 From: Michael Soh <2767724+sohmc@users.noreply.github.com> Date: Fri, 3 Jan 2025 20:39:48 -0500 Subject: [PATCH 17/19] Updates to readme --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 65fd1bf..757f119 100644 --- a/README.md +++ b/README.md @@ -4,8 +4,8 @@ A Bash script to generate a tar.gz backup of a folder, with an option to automatically upload the backup file to a cloud service using [rclone](https://github.com/rclone/rclone). List of cloud/storage providers currently supported by rclone can be found [here](https://github.com/rclone/rclone#storage-providers). -
-Latest version: 1.3.0 ([changelog](https://github.com/MichaelYochpaz/Backup-Script/blob/master/changelog.md)) + +Latest version: 1.3.0 ([changelog](changelog.md)) ## Features * Generate a tar.gz backup file of a folder. @@ -59,4 +59,4 @@ or using command-line arguments (will override configuration that's set on on th **A:** Go to your Pushbullet account's [settings page](https://www.pushbullet.com/#settings/account), and click the "Create Access Token" button. **Q:** I found a bug, or have an idea for a feature. How can I help? -**A:** Feel free to open an [issue](https://github.com/MichaelYochpaz/Backup-Script/issues) and post your issue / suggestion. \ No newline at end of file +**A:** Feel free to open an [issue](/issues) and post your issue / suggestion. From 02e6fdcfc0e192daf4b601ea3a660028253c7397 Mon Sep 17 00:00:00 2001 From: Michael Soh <2767724+sohmc@users.noreply.github.com> Date: Fri, 3 Jan 2025 20:44:47 -0500 Subject: [PATCH 18/19] Got rid of link to issues since this isn't officially supported. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 757f119..0493853 100644 --- a/README.md +++ b/README.md @@ -59,4 +59,4 @@ or using command-line arguments (will override configuration that's set on on th **A:** Go to your Pushbullet account's [settings page](https://www.pushbullet.com/#settings/account), and click the "Create Access Token" button. **Q:** I found a bug, or have an idea for a feature. How can I help? -**A:** Feel free to open an [issue](/issues) and post your issue / suggestion. +**A:** Feel free to open an issue and post your issue / suggestion. From 04ffa7bb458a013e63ff4ffd9e3b1c4dfd0634e9 Mon Sep 17 00:00:00 2001 From: Michael Soh <2767724+sohmc@users.noreply.github.com> Date: Fri, 3 Jan 2025 20:54:36 -0500 Subject: [PATCH 19/19] updated version number --- backup | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/backup b/backup index fe59177..60fa650 100755 --- a/backup +++ b/backup @@ -2,8 +2,8 @@ ## ------------------------------------ ## Made By: Michael Yochpaz (C) 2020 ## Contributor: Michael Soh (github:sohmc) -## https://github.com/MichaelYochpaz/Backup-Script -## Version: 1.2.0 +## https://github.com/sohmc/Backup-Script +## Version: 1.3.0 ## License: GPLv3 ## ------------------------------------ ## -------------- Usage ---------------