Thanks to HAL, dbus, and the whole alphabet soup, we can execute a script when we plug in our digital camera. The default, running f-spot, doesn’t really do much good. It doesn’t accomplish what it should, namely moving all the files from the camera to our hard drive. Here’s a script I wrote that will actually do that, and it even has a progress bar! It will also create new directories if you import multiple rounds of photos, to prevent overwriting of images. Note that you need zenity in order for this to work.
#!/bin/sh
#change photo_root to the place where all the image directories should go
#change camera_mount to the directory where the camera gets mounted
#change the end of camera_dir to indicate where the photos lie on your flash card
#change dirname to some expression that outputs what you'd like your directories to be called
# default is YYMMDD
photo_root="/home/owen/Documents/images/photos/raw/"
camera_mount="/media/NO_NAME"
camera_dir=$camera_mount"/dcim/101olymp/"
dirname=`date +%y%m%d`
if type 'zenity' 1>/dev/null 2>&1 ; then
echo fine
else
echo We need zenity
exit 1
fi
if [ `df |grep $camera_mount |wc -l` == "0" ] ; then
zenity --error --text="Camera not mounted, exiting"
exit 1
fi
new_dir_made=0
suffix_val=0
new_dir="fart"
while [ $new_dir_made = 0 ] ; do
if [ -d "$photo_root"$dirname"-"$suffix_val ] ; then
let suffix_val=suffix_val+1
else
mkdir "$photo_root"$dirname"-"$suffix_val
new_dir="$photo_root"$dirname"-"$suffix_val
new_dir_made=1
fi
done
if [ ! -d $new_dir ] ; then
zenity --error --text="Couldn't create new dir"
exit 1
elif [ $new_dir = "fart" ] ; then
zenity --error --text="Couldn't create new dir"
exit 1
fi
file_count=`ls -1 $camera_dir | wc -l`
i=0
(
for file in $camera_dir/* ; do
let value=i*100/file_count
echo $value
mv $file $new_dir
let i=i+1
sleep 1
done
echo "100"
) |
zenity --progress \
--title="Importing images" \
--text="Moving images to hard drive..." \
--percentage=0 \
--auto-close
umount $camera_mount
nautilus $new_dir