photoname is a command-line utility for renaming/moving photo image files. The new folder location and naming are determined by the photo shoot date information contained within the file's EXIF tags.
photoname is written in Haskell. It's known to build under GHC 7.6.1 on systems where System.Posix (unix) packages are available.Bjorn Bringert's libexif binding library is required to build this software.
The path calculation scheme used here is admittedly specific to my needs. I welcome suggestions discussing, or patches allowing, more flexibility.
photoname's --help usage information:
Usage: photoname [OPTIONS] FILES
Rename and move photo files based on EXIF data
Options:
-c FILE --config=FILE Defaults to ~/.config/photoname.conf. See CONFIG
-C --no-config Do not load config file
-D --no-dirs No subdirectory hierarchy. Just do DIR/NEWFILE
-h --help This help text
--move Move the files, don't just hard-link to the new locations
-n --no-action Display what would be done, but do nothing
-o --old-style Use older name format with serial. See FILENAME FORMAT
-p DIR --parent-dir=DIR Top-level directory where new links are created. Default: .
-q --quiet Suppress normal output of what's being done
-s SUF --suffix=SUF Add optional suffix to each name. See SUFFIX
This software is for renaming and storing your digital photos. It will
attempt to construct a meaningful filename based on the EXIF shoot date
in the file and optionally some other information.
CONFIG
The program will attempt to load a config file from this location:
~/.config/photoname.conf A different path may be specified with the
--config switch
Entries in this file should be the long switches above minus the -- and
including any arguments they may have. To completely ignore an existing
config file, use the --no-config switch.
Example config contents:
move
old-style
parent-dir=~/mypics
suffix=_dwm
FILENAME FORMAT
Normal operation builds a subdirectory hierarchy consisting of directories
for the years, then subdirs within those for the day photos were
shot. These day dirs contain the image files, named as follows:
A photo shot on 2002-May-02 01:23:07 PM:
img_1790.jpg -> <PARENTDIR>/2002/2002-05-02/20020502-132307.jpg
The EXIF date/time stamp used for naming is the first of these fields
to be found: DateTimeDigitized, DateTimeOriginal, DateTime
The <PARENTDIR> is the one given by the --parent-dir switch and
represents the top-level of where you're storing photos.
The --no-dirs switch will suppress the directory-hierarchy-creating part
of this, instead placing the new links directly in <PARENTDIR>. So
you get files like:
<PARENTDIR>/20020502-132307.jpg
Default behavior is to create hard links to the new paths and leave the
original links as they were. You can use the --move switch to not leave
the original links.
The --old-style switch specifies the prior behavior of photoname where the
name is a date followed by the last three digits of the camera-assigned
number from the original filename:
img_1790.jpg -> <PARENTDIR>/2002/2002-05-02/20020502_790.jpg
The code is basically looking for three digits before the file extension
to use as a 'serial' number for the day's photos. This is a seemingly
common occurrance with cameras that we can pick numbers off the end of
the filename. Examples of the two that I have:
vvv (use these digits)
Panasonic: P###0###.jpg
Canon: img_####.jpg
^^^
^^^
The --old-style behavior in photoname remains for backwards
compatibility. Many cameras today (and particularly camera phones)
don't generate a name we can use in this way, and so something needed
to change in this software.
Another nagging problem is the old-style naming is
non-deterministic. Using photoname --old-style on a file may not always
give you the same name, say if the serial info in the name is ever
lost. Naming based on the EXIF data alone is more reliable.
SUFFIX
The optional --suffix switch can be used to provide a string placed
between the date/time and extension. Use it for anything you like. An
example is photographer initials or series info. Example:
photoname invoked with --suffix=_dwm :
20020502-132307_dwm.jpg
Version 3.0.0 Dino Morelli <dino@ui3.info>
older versions can be found in this directory
last modified 2012-11-01