b-list() { if [[ -z "$1" ]]; then column -t <(borg list "$BORG_REPO") else borg list "$BORG_REPO::$1" fi } b-delete() { while (( $# > 0 )); do if [[ ! -z "$1" ]]; then echo "Deleting... $1" borg delete "$BORG_REPO::$1" fi shift done } b-create() { local SUDO="" if command -v sudo > /dev/null; then SUDO="$(command -v sudo)" fi local IGNORE_FILE="/tmp/$(uuidgen)" cat /home/stonewareslord/syncthing/me/backup{,/"$(hostname)"}/nobackup > "$IGNORE_FILE" if [[ -f "/home/stonewareslord/syncthing/me/backup/$(hostname)/mount" ]]; then "$SUDO" "/home/stonewareslord/syncthing/me/backup/$(hostname)/mount" fi "$SUDO" borg create -vpsx --exclude-caches --compression lzma,7 --exclude-from "$IGNORE_FILE" $BORG_REPO::$(hostname)-$(uuidgen) / /boot /home } b-rename() { borg rename -v "$BORG_REPO::$1" "$2" } b-info() { borg info "$BORG_REPO::$1" } b-diff() { borg list "$BORG_REPO" echo -n "First ID: " read ID1 echo -n "Second ID: " read ID2 if [ -z "$ID2" ] || [ -z "$ID2" ]; then echo "No id" >&2 return 1 fi BASEPATH="/tmp/$(uuidgen)" mkdir -p "$BASEPATH" FILE_LIST1="$BASEPATH/$(uuidgen)" FILE_LIST2="$BASEPATH/$(uuidgen)" A_DIFFS="$BASEPATH/$(uuidgen)" B_DIFFS="$BASEPATH/$(uuidgen)" FILE_SIZE_LIST1="$BASEPATH/$(uuidgen)" FILE_SIZE_LIST2="$BASEPATH/$(uuidgen)" COMPLETED_FILE1="$BASEPATH/$(uuidgen)" COMPLETED_FILE2="$BASEPATH/$(uuidgen)" echo "FILE_LIST1: $FILE_LIST1" echo "FILE_LIST2: $FILE_LIST2" echo "A_DIFS: $A_DIFFS" echo "B_DIFFS: $B_DIFFS" echo "FILE_SIZE_LIST1: $FILE_SIZE_LIST1" echo "FILE_SIZE_LIST2: $FILE_SIZE_LIST2" echo "COMPLETED_FILE1: $COMPLETED_FILE1" echo "COMPLETED_FILE2: $COMPLETED_FILE2" borg list --short "$BORG_REPO::$ID1" | pv -N "Getting List 1" > "$FILE_LIST1" borg list --short "$BORG_REPO::$ID2" | pv -N "Getting List 2" > "$FILE_LIST2" # Find differences and calculate them diff <(pv -cN "List 1 Diff" "$FILE_LIST1") <(pv -cN "List 1 Diff" "$FILE_LIST2") > >(ag '^<' | perl -pe 's/^< //' > "$A_DIFFS") > >(ag '^>' | perl -pe 's/^> //' > "$B_DIFFS") # Truncate everything :|tee "$FILE_LIST1" "$FILE_LIST2" # Calculate sizes of file1 while read i do test -f /"$i" && du -sh /"$i" 2>/dev/null >> "$FILE_SIZE_LIST1" done < <(pv -N "Calculating a sizes" "$A_DIFFS") # Sort everything pv -N "Sorting a sizes" "$FILE_SIZE_LIST1" | sort -h | tac > "$COMPLETED_FILE1" # Calculate sizes of file2 while read i do test -f /"$i" && du -sh /"$i" 2>/dev/null >> "$FILE_SIZE_LIST2" done < <(pv -N "Calculating b sizes" "$B_DIFFS") # Sort everything pv -N "Sorting b sizes" "$FILE_SIZE_LIST2" | sort -h | tac > "$COMPLETED_FILE2" # Truncate everything :|tee "$A_DIFFS" "$B_DIFFS" "$FILE_SIZE_LIST1" "$FILE_SIZE_LIST2" echo "In first backup:" echo "$COMPLETED_FILE1" echo "In second backup:" echo "$COMPLETED_FILE2" } b-size() { borg list "$BORG_REPO" echo -n "ID: " read ID if [ -z "$ID" ]; then echo "No id" >&2 return 1 fi FILE_LIST="/tmp/$(uuidgen)" FILE_SIZE_LIST="/tmp/$(uuidgen)" COMPLETED_FILE="/tmp/$(uuidgen)" echo "FILE_LIST: $FILE_LIST" echo "FILE_SIZE_LIST: $FILE_SIZE_LIST" echo "COMPLETED_FILE: $COMPLETED_FILE" borg list --short "$BORG_REPO::$ID" | pv -N "Getting List" > "$FILE_LIST" while read i do test -f /"$i" && du -sh /"$i" 2>/dev/null >> "$FILE_SIZE_LIST" done < <(pv -N "Calculating Sizes" "$FILE_LIST") :>"$FILE_LIST" pv -N "Sorting List" "$FILE_SIZE_LIST" | sort -h | tac > "$COMPLETED_FILE" :>"$FILE_SIZE_LIST" less "$COMPLETED_FILE" } b-extract() { local BACKUP="$1" shift borg extract "$BORG_REPO::$BACKUP" $* } b-cmd() { echo "$BORG_REPO" $* }