#!/bin/bash set -eu set -o pipefail save_directory="" saveset_pattern='.' starting_directory="/" nonrecursive="" backup_id_paragraph=False usage() { retval="$1" ( echo "Usage: $0 --save-directory /save/dir --savset-pattern '^.*_movie_.*$' --starting-directory /start/dir --nonrecursive --backup-id-same-line" echo " --save-directory is required" echo ' --saveset-pattern defaults to '"$saveset_pattern" echo " --starting-directory defaults to $starting_directory" echo " --nonrecursive" echo ' --backup-id-paragraph' echo echo "Example uses:" echo " 1) find-backup --save-directory /backshift-production/save-directory --saveset-pattern '_just-movie_' --starting-directory '/movie/Ninjago/Season 2/Disc 1'" echo " 2) find-backup --save-directory /backshift-production/save-directory --saveset-pattern 'server.*_just-home' --starting-directory '/home/dstromberg/public_html/primes'" ) 1>&2 exit "$retval" } while [ "$#" -ge 1 ] do case "$1" in --save-directory) save_directory="$2" shift ;; --saveset-pattern) saveset_pattern="$2" shift ;; --starting-directory) starting_directory="$2" shift ;; --nonrecursive) nonrecursive=--nonrecursive ;; --backup-id-paragraph) backup_id_paragraph=True ;; --help) usage 0 ;; *) echo "$0: Unrecognized option: $1" 1>&2 usage 1 ;; esac shift done if [ "$save_directory" = "" ] then echo "$0: --save-directory is a required option" 1>&2 usage 1 fi case "$starting_directory" in /*) ;; *) echo "$0: --starting-directory must begin with a /" 1>&2 usage 1 ;; esac function gen_backup_filenames { backshift \ --save-directory "$save_directory" \ $nonrecursive \ --list-backup \ --backup-id "$backup_id" \ --starting-directory "$starting_directory" 2>&1 || true } for backup_id in $(backshift --save-directory "$save_directory" --list-backups | awk ' { print $1 }' | egrep "$saveset_pattern") do case "$backup_id_paragraph" in True) echo "$backup_id" gen_backup_filenames "$backup_id" | sed "s#^# #" echo ;; False) gen_backup_filenames "$backup_id" | sed "s/^/$backup_id /" ;; *) echo "$0: Internal error: \$backup_id_same_line has an unrecognized value" 1>&2 exit 1 ;; esac done