A Simple Bash Script to Download and Organize Photos

Dmitri Popov

Productivity Sauce

Oct 22, 2010 GMT
Dmitri Popov

When it comes to dowloading photos from a storage card and organizing them in the process, Rapid Photo Downloader is just the ticket. But if you prefer to do that from the command line, here is a simple Bash script cobbled together by yours truly.

#!/bin/bash
SOURCE_DIR="/media/NIKOND5000/DCIM/100D5000"
WORK_DIR=TMP
TARGET_DIR=Photos
cp -R $SOURCE_DIR $WORK_DIR
cd $WORK_DIR
exiftool -r -d ../$TARGET_DIR/%Y%m%d/%Y%m%d-%H%M%S- '-FileName<$dateTimeOriginal$MyShutterCount.NEF' -ext NEF ../$WORK_DIR
rm -rf ../TMP

The script copies photos from a mounted storage device like an SD card to the TMP folder, organizes the photos into folders by date, and then renames each photo using the data pulled from the photo's metadata. Photos are renamed using the YYYYMMDD-HHMMSS-ShutterCount.EXT format, so the resulting file name looks something like this: 20102019-135547-3375.NEF.

There are two things required for this script to work. First of all, you need to install the exiftool package which the script uses to extract relevant metadata, arrange photos, and rename them. exiftool is available in the software repositories of many mainstream Linux distributions, so you can install it using your distro's package manager. On Ubuntu, you can do this by executing the command below:

sudo apt-get install libimage-exiftool-perl

You also need to create the .ExifTool_config file in your home directory, and put the following function in it:

%Image::ExifTool::UserDefined = (
    'Image::ExifTool::Composite' => {
        MyShutterCount => {
             Require => 'ShutterCount',
             ValueConv => 'substr("$val", 0)',
        },
     },
);
1; #end

Adding the .ExifTool_config file is required only if you want to include the shutter count value in the file names. In case you use another renaming rule, you can skip this step.

Before you start using the script, specify the correct SOURCE_DIR value and the file format (e.g., RAW, CR2, or JPG).

That's all there is to it. Insert the card with photos, run the script, and it will download the photos, arrange them into folders, and rename them.

Sources:
http://u88.n24.queensu.ca/exiftool/forum/index.php/topic,2320.0.html

http://owl.phy.queensu.ca/~phil/exiftool/config.html

comments powered by Disqus
Subscribe to our Linux Newsletters
Find Linux and Open Source Jobs
Subscribe to our ADMIN Newsletters

Support Our Work

Linux Magazine content is made possible with support from readers like you. Please consider contributing when you’ve found an article to be beneficial.

Learn More

News