From 8336ffdacf23e89582c2ad75063129997b820e7b Mon Sep 17 00:00:00 2001 From: ktyl Date: Tue, 19 Jul 2022 23:50:37 +0100 Subject: [PATCH] improve camera import script --- .scripts/cam/env.sh | 1 + .scripts/cam/importcam | 40 ++++++++++++++++++++++++++++++---------- 2 files changed, 31 insertions(+), 10 deletions(-) diff --git a/.scripts/cam/env.sh b/.scripts/cam/env.sh index ec8dffe..c6c71c6 100644 --- a/.scripts/cam/env.sh +++ b/.scripts/cam/env.sh @@ -1,6 +1,7 @@ #!/usr/bin/env bash export CAM_SRC="/run/media/$USER/disk/" +export CAM_PIC_SRC="$CAM_SRC/DCIM/100MSDCF" # TODO: this is actually garbage lol, when importing pictures we should sort them # by their metadata, not by todays date and CERTAINLY not in an env variable which could diff --git a/.scripts/cam/importcam b/.scripts/cam/importcam index 167b55c..0b01c24 100755 --- a/.scripts/cam/importcam +++ b/.scripts/cam/importcam @@ -1,18 +1,38 @@ #!/usr/bin/env zsh -# TODO: offer to clear camera storage +# copy photos with exif data on them into a date-structured directory hierarchy -src=$CAM_SRC -pic=$CAM_PIC +# source and destination locations +srcdir="$CAM_PIC_SRC" +picdir="$(xdg-user-dir PICTURES)/cam" -if [ "$#" -eq 2 ]; then - srcdir=$1 - bkpdir=$2 -fi +start=1 +total=`ls $srcdir | wc -l` -[ ! -d $srcdir ] && echo "$srcdir not found" && exit 1 -[ ! -d $bkpdir ] && echo "$bkpdir not found" && exit 1 +for f in `ls $srcdir` +do + progress="$start/$total" + start=$((start+1)) -rsync --update --recursive --human-readable --progress $srcdir $bkpdir + src="$srcdir/$f" + + # get the exif create date and turn it into a filepath + datestr=`exiftool -CreateDate "$src"` + datedir=`echo "$datestr" | awk '{ gsub(":","/",$4); print $4; }'` + datedir="$picdir/$datedir" + + # make sure the destination exists + [ ! -d $datedir ] && mkdir -p $datedir + + dest="$datedir/$f" + + # if the file exists, don't overwrite + if [ -f $dest ]; then + print "[$progress] skipping $src->$dest: destination file already exists" + else + print "[$progress] sync $src -> $dest" + rsync $src $dest + fi +done exit 0