diff options
author | Erich Eckner <git@eckner.net> | 2023-12-28 21:00:18 +0100 |
---|---|---|
committer | Erich Eckner <git@eckner.net> | 2023-12-28 21:00:18 +0100 |
commit | 16061b13c63c91562f38ca8bb2fe33f286fda0e6 (patch) | |
tree | cb4e9aa7ea5d8548f8bd216a39739de466ad8c5d | |
parent | 7c49c31851ab50bd6f9240e8d2796c1b353d736a (diff) | |
download | copyPhotos-16061b13c63c91562f38ca8bb2fe33f286fda0e6.tar.xz |
code aufgeraeumt
-rwxr-xr-x | copyPhotos | 118 |
1 files changed, 37 insertions, 81 deletions
@@ -7,20 +7,16 @@ set -e verwendung() { echo 'copyPhotos [-i]' - echo ' -d übergehe Kopieren zum Drittbackup' - echo ' -f übergehe Kopieren zum Fileserver' echo ' -i übergehe bereits vorhandene Dateien ohne zu meckern' - echo ' -z übergehe Kopieren zum Zweitbackup' + echo ' -o Ignoriere, wenn ein Backup-server offline ist.' exit 1 } zielVerzeichnis=~/Bilder -endHost="erich@fileserver" -endZielVerzeichnis="Bilder/Fotos" -zweitHost='erich@pizza' -zweitZielVerzeichnis='data/Bilder/Fotos' -drittHost='data@backup' -drittZielVerzeichnis='raid/Bilder/Fotos' +ziele=(# 'erich@fileserver:Bilder/Fotos' + 'erich@pizza:data/Bilder/Fotos' + 'data@backup:raid/Bilder/Fotos' + 'erich@backup-lo:/mnt/crypted/transfer/Bilder') publicHost="ecknernet@eckner.net:backstage/downloadarea" unset daten @@ -28,30 +24,22 @@ unset jahre declare -A daten declare -A jahre -backup=true -fileserver=true ignoriere=false -stefanie=true +offline_erlaubt=false eval set -- "$( - getopt -o dfiz -n "$(basename "$0")" -- "$@" || \ + getopt -o io -n "$(basename "$0")" -- "$@" || \ echo verwendung )" while true do case "$1" in - -d) - backup=false - ;; - -f) - fileserver=false - ;; -i) ignoriere=true ;; - -z) - stefanie=false + -o) + offline_erlaubt=true ;; --) shift @@ -123,78 +111,46 @@ trap 'rm -rf --one-file-system "${tmp_dir:?}"' EXIT tar -cf - "${!jahre[@]}" --xform='s@^\([0-9]\{4\}\)_@\1/\1_@' | \ tar -C "${tmp_dir}" -x -pingErg=0 -if ${fileserver} -then - ping -c1 "${endHost}" > /dev/null || \ - pingErg=$? -else - pingErg=1 -fi - -[ ${pingErg} -gt 1 ] && exit ${pingErg} +erg=0 -if [ ${pingErg} -eq 0 ] -then +for ziel in "${ziele[@]}"; do - rsync --progress --ignore-existing -avc "${tmp_dir}/" "${endHost}:${endZielVerzeichnis}/" + host="${ziel%:*}" + verzeichnis="${ziel#*:}" - echo "${summen}" | \ - sed 's@^\([0-9a-f]\+ \+\)\([0-9]\{4\}\)_@\1'"${endZielVerzeichnis}"'/\2/\2_@' | \ - ssh "${endHost}" 'sha512sum -c' + pingErg=0 -fi -erg=${pingErg} + pingHost=$( + sed -n '/^Host '"${host#*@}"'$/,/^$/ { + s/^\s\+Hostname \(\S\+\)$/\1/ + T + p + }' ~/.ssh/config + ) + if [ -z "${pingHost}" ]; then + pingHost="${host#*@}" + fi -pingErg=0 -if ${stefanie} -then - ping -c1 "${zweitHost#*@}" > /dev/null || \ + ping -c1 "${pingHost}" > /dev/null || \ pingErg=$? -else - pingErg=1 -fi - -[ ${pingErg} -gt 1 ] && exit ${pingErg} - -if [ ${pingErg} -eq 0 ] -then - - rsync --progress --ignore-existing -avc "${tmp_dir}/" "${zweitHost}:${zweitZielVerzeichnis}/" - echo "${summen}" | \ - sed 's@^\([0-9a-f]\+ \+\)\([0-9]\{4\}\)_@\1'"${zweitZielVerzeichnis}"'/\2/\2_@' | \ - ssh "${zweitHost}" 'sha512sum -c' - -fi -if [ ${pingErg} -gt ${erg} ]; then - erg=${pingErg} -fi - -pingErg=0 -if ${backup} -then - ping -c1 "${drittHost#*@}" > /dev/null || \ - pingErg=$? -else - pingErg=1 -fi + ! ${offline_erlaubt} && [ ${pingErg} -gt 1 ] && exit ${pingErg} -[ ${pingErg} -gt 1 ] && exit ${pingErg} + if [ ${pingErg} -eq 0 ] + then -if [ ${pingErg} -eq 0 ] -then + rsync --progress --ignore-existing -avc "${tmp_dir}/" "${host}:${verzeichnis}/" - rsync --progress --ignore-existing -avc "${tmp_dir}/" "${drittHost}:${drittZielVerzeichnis}/" + echo "${summen}" | \ + sed 's@^\([0-9a-f]\+ \+\)\([0-9]\{4\}\)_@\1'"${verzeichnis}"'/\2/\2_@' | \ + ssh "${host}" 'sha512sum -c' - echo "${summen}" | \ - sed 's@^\([0-9a-f]\+ \+\)\([0-9]\{4\}\)_@\1'"${drittZielVerzeichnis}"'/\2/\2_@' | \ - ssh "${drittHost}" 'sha512sum -c' + fi + if [ ${pingErg} -gt ${erg} ]; then + erg=${pingErg} + fi -fi -if [ ${pingErg} -gt ${erg} ]; then - erg=${pingErg} -fi +done while true do |