diff options
author | Erich Eckner <git@eckner.net> | 2016-10-22 15:39:10 +0200 |
---|---|---|
committer | Erich Eckner <git@eckner.net> | 2016-10-22 15:39:10 +0200 |
commit | a1ccd8ae7015c8c120e731146282a824574e4c61 (patch) | |
tree | d2fd4a8b26b37ea7e2e0b35f5af5d35c098c2847 | |
download | copyPhotos-a1ccd8ae7015c8c120e731146282a824574e4c61.tar.xz |
initial commit
-rwxr-xr-x | copyPhotos | 147 |
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 |