Skip to content

Fixing broken dates

When I was home over the weekend, I was working on helping my parents sort out the photos they took while they were in Europe. Doing this, I noticed that the date on the camera was out by a month. Being a stickler for correct metadata, I tried to figure out a way to fix this. This is the command line that I came up with. I’ve broken it into multiple lines here for clarity.

for f in *.jpg ; do
    NEWDATE=`exiftool -CreateDate $f |
        perl -pe 's/.*: 2006:([^:]+):/sprintf "2006:%02d:", ($1+1)/e'`;
    echo $f: $NEWDATE;
    exiftool -CreateDate="$NEWDATE" -DateTimeOriginal="$NEWDATE" $f;
done

This will modify the month field in the EXIF data of each file by increasing it by 1. It doesn’t handle wrap around or anything, I didn’t need to do that. The fanciest it gets is making sure there’s the correct number of zeros padding the number.

You don’t want to run this twice.

{ 2 } Comments

  1. Tom Eastman | November 24, 2006 at 09:07 | Permalink

    The tool ‘jhead’ (also used by Gallery) is your friend here.

    You could have gone:

    $ jhead -ta+744 *.jpg

    Basically, that example adds 744 hours (31 days) to the date. Also have a look at the man page for the ‘-da’ option.

    ‘jhead’ is great.

  2. Robin | November 24, 2006 at 12:59 | Permalink

    Ah, cunning. I didn’t know about jhead.

Post a Comment

Your email is never published nor shared. Required fields are marked *