#!/bin/sh
# download_cam.sh
# 2019-10-26
# by Gernot Walzl
# download_cam.desktop
#
# [Desktop Entry]
# Name=download_cam
# Comment=Gets all photos from a camera
# Exec=download_cam
# Icon=camera-photo
# Terminal=true
# Type=Application
# Categories=Graphics;Photography;
DESTDIR=${DESTDIR:-$HOME/Pictures}
GPHOTO2=${GPHOTO2:-/usr/bin/gphoto2}
get_camname () {
LANG=C $GPHOTO2 --summary 2> /dev/null \
| sed -n '/Model:/ s/Model: // p'
}
wait_for_camera () {
CAMNAME="$(get_camname)"
if [ -z "$CAMNAME" ]; then
for CNT in $(seq 9 -1 0); do
echo -en "\rWaiting for camera ... $CNT"
sleep 1
CAMNAME="$(get_camname)"
done
echo ""
fi
if [ -z "$CAMNAME" ]; then
echo "No camera detected."
sleep 1
else
echo "Model: $CAMNAME"
fi
}
download () {
local CAMNAME="$1"
if [ -z "$CAMNAME" ]; then
return 1
fi
local CAMDIR=$(echo "$CAMNAME" | sed 's/ /_/g')
local CURRDIR=$(pwd)
echo ""
echo "Downloading all files from $CAMNAME to ${DESTDIR}/${CAMDIR}:"
mkdir -p "${DESTDIR}/${CAMDIR}"
cd "${DESTDIR}/${CAMDIR}"
$GPHOTO2 --get-all-files --force-overwrite
cd "$CURRDIR"
}
order_by_date () {
local CAMNAME="$1"
if [ -z "$CAMNAME" ]; then
return 1
fi
local CAMDIR=$(echo "$CAMNAME" | sed 's/ /_/g')
local CURRDIR=$(pwd)
echo ""
echo "Ordering files by date:"
if [ -d "${DESTDIR}/${CAMDIR}" ]; then
cd "${DESTDIR}/${CAMDIR}"
else
return 1
fi
ls . | while read FILE; do
if [ -f "$FILE" ]; then
DATE=$(stat -c %y "$FILE" | cut -d' ' -f1)
mkdir -p "$DATE"
mv -v "$FILE" "$DATE"
fi
done
cd "$CURRDIR"
}
wait_for_camera
if [ ! -z "$CAMNAME" ]; then
download "$CAMNAME"
order_by_date "$CAMNAME"
fi