[ANN] organize tool

Added by Brad Schick over 8 years ago

'organize' is a command-line tool that creates organized directories of photos and other media files. Photos can be easily organized by metadata into a directory structure of your choosing. It is built on Exiv2 and currently supports a fairly wide selection of exif, iptc, and file metadata (xmp could be added if there is demand).

I created this tool after looking around for an existing solution and finding no great options. My own personal photo library had become a jumble of 15,000+ files in a hodge-podge directory structure. With this new tool I ran the following:

organize /var/photos /var/photos2 @year-@month/@day

And a few minutes later had an organized library with photos and videos grouped first by year-month and then by day of the month (with duplicates filtered out). On windows it would be very similar:

organize c:\users\public\pictures c:\users\public\pictures2 @year-@month\@day

There are currently no prepackaged binaries, but I will try to get some uploaded soon. The tool is fairly easy to build on Windows and Unix like systems. It builds separately from the rest of Exiv2 because it has an extra dependency on the C++ boost library. To build the tool, first make sure you have boost installed, then build exiv2, and then build the organize tool. On Windows there is a project file in exiv2\msvc\organize, and for Unix systems there is a makefile in exiv2\contrib\organize (in both cases you may need to tweak the include and lib dirs to point to boost on your system).

Below is the tool's help output to give you a better idea of what is does. Let me know if you find is useful or have suggestions.

Usage: organize [options] source-dir dest-dir pattern

  Creates groups of files in new directories defined by a metadata 'pattern'.
  Files are copied, moved, or linked from 'source-dir' to 'dest-dir'.
  The destination directory should not be within the source directory.

  -m [ --move ]            move files rather than copy
  -s [ --symlink ]         symlink files rather than copy (posix only)
  -o [ --order ] arg       order and types of metadata to read
                           e=exif, i=iptc, f=file (default: eif)
  -u [ --unsorted ] arg    special directory to store unsorted files (default:
  -d [ --dups ] arg        special directory to store files with duplicate
                           names (default: duplicates)
  -f [ --force ]           overwrite duplicate files instead of using special
  -r [ --rename ]          rename duplicate files instead of using special
  -i [ --ignore ]          ignore both unsorted and duplicate files instead of
                           using special directories
  --ignore-unsorted        ignore unsorted files instead of using special
  --ignore-dups            ignore duplicate files instead of using special
  --verify                 verify copied or moved files and exit if incorrect
  -x [ --exclude ] arg     exclude directories and files that contain arg (case
                           sensitive on all platforms)
  -l [ --limit-depth ] arg limit recursion to specified depth (0 disables
  -v [ --verbose ]         prints operations as they happen
  -n [ --dry-run ]         do not make actual changes (implies verbose)
  -h [ --help ]            show this help message then exit
  -V [ --version ]         show program version then exit

Pattern values:
  @date   date captured (2009-01-19)
  @year   year captured (2009)
  @month  month captured (01)
  @day    day captured (19)
  @time   time captured (14-35-27)
  @hour   hour captured (14)
  @min    minute captured (35)
  @sec    second captured (27)
  @dim    pixel dimension (2272-1704)
  @x      pixel width (2272)
  @y      pixel height (1704)
  @make   device make (Canon)
  @model  device model (Canon PowerShot S40)
  @speed  shutter speed (1-60)
  @aper   aperture (F3.2)
  @iso    iso speed (400)
  @focal  focal length (8.6 mm)
  @dist   subject distance (1.03 m)
  @meter  meter mode (multi-segment)
  @macro  macro mode (Off)
  @orient orientation (top_left)
  @lens   lens name (Tamron 90mm f-2.8)
  @key    first keyword (Family)

  `organize -m mess clean @year-@month'
     Moves files from 'mess' into directories of 'clean' according to
     year-month the file was captured (clean/2006-11/...)

  `organize -o ie source find width-@x/height-@y'
     Copies files into directories according first to pixel width then pixel
     height. Check iptc then exif metadata (find/width-2272/height-1704/...)

  `organize -lf source find @aper/@hour'
     Force create symlinks in directories according first to aperture then
     hour captured (find/F3.2/15/...)

Edit: Updated to latest --help output

Replies (9)

RE: [ANN] organize tool - Added by Anonymous over 8 years ago

This is a very useful tool which meets a real need. Congratulations to Brad for this achievement.

Brad and I have collaborated to improve the exiv2/msvc build machinery. A new solution exiv2+organize.sln has been added to enable organize.exe to be build at the same time as building the rest of the exiv2 family of DLLs, static and dynamic libraries. The existing solution exiv2.sln is unchanged.

The details of how to build exiv2 (with or without organize) are explained in exiv2/msvc/README-MSVC.txt


RE: [ANN] organize tool - Added by Anonymous over 8 years ago

It's very excellent tool! I love it.
With this tool, I can rearrange my photos by many perspective.
Just one point, I hope adding @lensname pattern value.
Anyway, thank you for your good job!

RE: [ANN] organize tool - Added by Brad Schick about 8 years ago

Thanks, glad you like the tool. I just committed code that adds the following additional metadata values:

@macro  macro mode (Off)
@orient orientation (top_left)
@lens   lens name (Tamron 90mm f-2.8)

This was an easy change thanks to new code Andreas added to the exiv2 library. If anyone needs them, the following would be easy for me to add as well:

flashBias, exposureMode, sceneMode, imageQuality, and whiteBalance

RE: [ANN] organize tool - Added by Brad Schick almost 8 years ago

A few people have written emails asking for a Windows binary. I've attached that to this post. Just unzip and run, no installation required.

organize.zip - 32bit Windows Binary (734 KB)

RE: [ANN] organize tool - Added by Andreas Huggel almost 8 years ago

Thanks. I do plan to include the organize binary in the Windows package, once I get it to cross-compile on Linux with the build script that I use for the Windows package...


RE: [ANN] organize tool - Added by Arjh Smith over 7 years ago

Hi Brad,

Would you be able to add the "Comment" field from EXIF that is customized from the camera directly ?

When you have multiple people using the same camera models. This is a great field to plug in some specific info about the shooter... either their initials or the Short Event Name.. things can really be automated by using that field.

Along with that I have a need to use the Shutter Count and Serial Number fields to Rename the files.

Do you think it would be possible to rename based on these fields ? This way I could have Folders based on the Camera Model_Serial Number and everything from them would be stored there permanently.


RE: [ANN] organize tool - Added by Anchal Nigam almost 4 years ago

This sounds awesome. Two questions:

  1. Where do I download it from?
  2. How are you checking for duplicates?

RE: [ANN] organize tool - Added by Robin Mills almost 4 years ago


This code is in our tar-ball (and on the trunk) in the directory contrib/organize. A Makefile is provided. You can also build with Visual Studio using the solution msvc/exiv2+organize.sln and this is documented in msvc/README-MSVC.txt. This code is a contribution and not routinely built and tested by the Exiv2 team.

I've never studied the organize code, so I cannot answer specific questions. I have quickly looked at variable 'dups' in contrib/organize/organize.cpp. I think duplicates are files with identical names (eg IMG_1234.JPG) in different directories. When you have the code built, I'm sure you can run this on a safe copy of your photos and find out. When you do, please update this thread to share your discoveries with the community.


RE: [ANN] organize tool - Added by Anchal Nigam almost 4 years ago

Okay thanks. I'll look and report my findings.


Redmine Appliance - Powered by TurnKey Linux