summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorErich Eckner <git@eckner.net>2016-10-22 15:39:10 +0200
committerErich Eckner <git@eckner.net>2016-10-22 15:39:10 +0200
commita1ccd8ae7015c8c120e731146282a824574e4c61 (patch)
treed2fd4a8b26b37ea7e2e0b35f5af5d35c098c2847
downloadcopyPhotos-a1ccd8ae7015c8c120e731146282a824574e4c61.tar.xz
initial commit
-rwxr-xr-xcopyPhotos147
1 files changed, 147 insertions, 0 deletions
diff --git a/copyPhotos b/copyPhotos
new file mode 100755
index 0000000..e66f9ed
--- /dev/null
+++ b/copyPhotos
@@ -0,0 +1,147 @@
+#!/bin/bash
+
+( # ANFANG
+
+set -e
+
+verwendung()
+{
+ echo 'copyPhotos [-i]'
+ echo ' -i übergehe bereits vorhandene Dateien ohne zu meckern'
+ exit 1
+}
+
+zielVerzeichnis="/home/erich/Bilder"
+endHost="fileserver"
+endZielVerzeichnis="Bilder/Fotos"
+publicHost="ecknernet:backstage/downloadarea"
+
+unset daten
+unset jahre
+declare -A daten
+declare -A jahre
+
+[ $# -gt 1 ] && verwendung
+ignoriere=false
+if [ $# -eq 1 ]
+then
+ [ "$1" == "-i" ] && ignoriere=true || verwendung
+fi
+
+for quelle in $(find /mnt/usb/ -type f \( -iname "*.jpg" -o -iname "*.rw2" -o \( -iname "*.mts" -not -name "00001.MTS" \) \) )
+do
+ datum="$(date -ud@"$(stat -c'%Y' "${quelle}")" '+%Y_%m_%d')"
+ daten["${quelle}"]="${datum}"
+ jahre["${datum}"]="${datum%%_*}"
+ [ ! -d "${zielVerzeichnis}/${datum}" ] && mkdir "${zielVerzeichnis}/${datum}"
+ if [ -e "${zielVerzeichnis}/${datum}/$(basename "${quelle}")" ]
+ then
+ if ! ${ignoriere}
+ then
+ >&2 echo "Datei '${zielVerzeichnis}/${datum}/$(basename "${quelle}")' existiert bereits! Ich beende."
+ exit 1
+ fi
+ else
+ cp "${quelle}" "${zielVerzeichnis}/${datum}/"
+ fi
+done
+
+summen="$(
+ for quelle in "${!daten[@]}"
+ do
+ datum="${daten["${quelle}"]}"
+ sha512sum "${quelle}" | \
+ sed "s| $(dirname "${quelle}")| ${datum}|"
+ done
+)"
+
+cd "${zielVerzeichnis}"
+
+echo "${summen}" | \
+ sha512sum -c
+
+pingErg=0
+ping -c1 "${endHost}" > /dev/null || \
+ pingErg=$?
+
+[ ${pingErg} -gt 1 ] && exit ${pingErg}
+
+if [ ${pingErg} -eq 0 ]
+then
+
+ tar -czf - "${!jahre[@]}" --xform='s@^\([0-9]\{4\}\)_@\1/\1_@' | \
+ ssh "${endHost}" '
+ cd "'"${endZielVerzeichnis}"'" && \
+ tar -xzkf - &&
+ sync
+ ' || \
+ ${ignoriere}
+
+ echo "${summen}" | \
+ sed 's@^\([0-9a-f]\+ \+\)\([0-9]\{4\}\)_@\1'"${endZielVerzeichnis}"'/\2/\2_@' | \
+ ssh "${endHost}" 'sha512sum -c'
+
+fi
+
+while true
+do
+ feh -XdF "${!jahre[@]}"
+ read -p '"[fk]:$regex": ' s
+ case "${s}" in
+ "")
+ break
+ ;;
+ "f:"*|"k:"*)
+ re="${s#*:}"
+ [ "${s}" == "f:"* ] && wen='Friedrich' || wen='Kasimir'
+ bild="$(
+ echo "${!daten[@]}" | \
+ tr ' ' '\n' | \
+ grep "${re}"
+ )"
+ if [ "$(echo "${bild}" | wc -l | cut -d' ' -f1)" -gt 1 ]
+ then
+ bild="$(
+ echo "${!daten[@]}" | \
+ tr ' ' '\n' | \
+ grep "${re}.*\.[jJ][pP][gG]\$"
+ )"
+ fi
+ if [ "$(echo "${bild}" | wc -l | cut -d' ' -f1)" -ne 1 ]
+ then
+ echo 'Nicht genau ein Treffer, sondern '"$(echo "${bild}" | wc -l | cut -d' ' -f1)"':'
+ echo "${bild}" | \
+ sed 's|^| |'
+ read s
+ continue
+ fi
+ echo "'${bild}'"
+ bild="${daten["${bild}"]}/$(basename "${bild}")"
+ feh -XdF "${bild}"
+ ec[0]='jJyY'
+ ec[1]='nN'
+ while [[ "${ec[0]}" != *"${was}"* ]] && [[ "${ec[1]}" != *"${was}"* ]] || [ -z "${was}" ]
+ do
+ read -p 'Dieses Bild für '"${wen}"' hochladen (j/y/n)? ' was
+ done
+ [[ "${ec[0]}" == *"${was}"* ]] && scp "${bild}" "${publicHost}/${wen}/"
+ ;;
+ esac
+done
+
+if [ ${pingErg} -eq 0 ]
+then
+ echo "${summen}" | \
+ sed 's|^[0-9a-f]\+ \+||' | \
+ xargs -r rm
+
+ echo "${summen}" | \
+ sed 's|^[0-9a-f]\+ \+||' | \
+ xargs -rn1 dirname | \
+ sort -u | \
+ xargs -r rmdir --ignore-fail-on-non-empty -p
+fi
+
+echo 'Erfolg!'
+
+) # ENDE