From cc5f3535c23585c76821cc00133e14810da9995d Mon Sep 17 00:00:00 2001 From: Andrew Cady Date: Sat, 9 Jan 2021 14:42:00 -0500 Subject: bup: backup files or snapshots --- dot/local/bin/bup | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 dot/local/bin/bup diff --git a/dot/local/bin/bup b/dot/local/bin/bup new file mode 100644 index 0000000..11c3a21 --- /dev/null +++ b/dot/local/bin/bup @@ -0,0 +1,53 @@ +#!/bin/sh + +# TODO: rbup makes remote backup + +btrfs_subvolume_backup() +{ + TARGET=$1~$(date -r "$1" -I) || return + [ ! -e "$TARGET" ] || TARGET=$1~$(date -r "$1" -Im) + [ ! -e "$TARGET" ] || TARGET=$1~$(date -r "$1" -Is) + [ ! -e "$TARGET" ] || return + + btrfs subvolume snapshot -r "$1" "$TARGET" +} + +file_with_extension_backup() +{ + local basename extension stamp date_format + date_format=%F_%H%M%S + basename=${1%.*} + extension=${1##*.} + stamp=$(date -r "$1" +"$date_format") || return + + TARGET=$basename.$stamp.$extension + if [ ! -e "$TARGET" ] + then + cp --reflink=auto -T "$1" "$TARGET" + else + printf 'Warning: No backup was made, since an apparent backup exists here: "%s"\n' "$TARGET" >&2 + return 0 + fi +} + +set -e + +[ $# = 1 ] +if [ -d "$1" ] +then + if btrfs subvolume show "$1" + then + btrfs_subvolume_backup "$1" + exit + fi +elif [ -f "$1" ] +then + case "$1" in + *.*) file_with_extension_backup "$1" + exit + ;; + esac +fi + +echo 'Unimplemented' >&2 +exit 1 -- cgit v1.2.3