ExifTool Forum

ExifTool => Newbies => Topic started by: kngharv on June 04, 2021, 08:46:30 PM

Title: preserve the current subdirectory name in exiftool operation
Post by: kngharv on June 04, 2021, 08:46:30 PM

Since I've been taking photos for a long time, predates DSLR, I have long organized photo by date.  Typically, I create a subdirectory which contains the date and a description of the event, such as

./20200721_cometC2020F3_neowise

where first 8 digit is always year, month, and day

I want to use exiftool to categorize photos in each of subdirectory and create a subdirectory inside it based upon
1. photo that has GPS info
2. photo has date but no GPS
3. photo doesn't have any exif info at all

so, idealy, the result will be

~/photo/20200721_cometC2020F3_neowise/geotag
~/20200721_cometC2020F3_neowise/timeStamp
~/20200721_cometC2020F3_neowise/noEXIF

and depend upon where rather the photo has appropriate info, the image file will move to appropriate subdirectory INSIDE the original subdirectory

I know about exiftool -directory

I also know about -filepath variable, which will return the filename with full path
/home/user/photo/20200721_cometC2020F3_neowise/DSC_3445.JPG

What I don't know is how to preserve  the name of the subdirectory immediate before the file name.

i need to do something like this:
exiftool -directory=$subDirectoryName_of_the_JPG_file/geoTag -if '($GPSDateStamp)' .

how to do that with advanced formatting? 

thanks in advance

Harv
Title: Re: preserve the current subdirectory name in exiftool operation
Post by: Phil Harvey on June 04, 2021, 09:41:59 PM
Hi Harv,

Use %d to represent the original directory of the file.  So I think you want this:

exiftool -directory=%d/geoTag -if '($GPSDateStamp)' .

- Phil
Title: Re: preserve the current subdirectory name in exiftool operation
Post by: Luuk2005 on June 05, 2021, 04:35:52 AM
Greetings Harv, Im also discovered a way to conduct some of the subdirectory logic without using many -if statements.
To replace many -if's, Im often use something like... -directory'<${Directory}/Text and ${ConditionalTagName;s/.*//}'
This because if $ConditionalTagName does not exist, then exiftool stays prejudice against the Text and part.

So for your sub-directories, the command might look like...
exiftool -m -directory=%d/NoEXIF -directory'<${Directory}/timeStamp${DateTimeOriginal;s/.*//}' -directory'<${Directory}/geotag${GPSDateStamp;s/.*//}' DIR

So at first, the exiftool decides for "NoEXIF" to be the default subdirectory name.
But then, if finding $DateTimeOriginal, will choose timeStamp for the subdirectory.
But then, if finding $GPSDateStamp, will instead choose geotag for the subdirectory.

Of course -directory=%d/NoEXIF is not really studying the file (like with an -if), to see if theres no exif data.
Its just assuming that if $DateTimeOriginal and $GPSDateStamp dont exist, then NoEXIF should be the subdirectory name.
So if you're already using many -if's to check many $exif-dates besides $DateTimeOriginal, you could insert something before geotag like...

-directory'<${Directory}/timeStamp${ExifDateTag2;s/.*//}' -directory'<${Directory}/timeStamp${ExifDateTag3;s/.*//}' ...
The s/.*// is just destroying all the DateTag values, but I like the way this does make the whole -option to be conditional.
Lol, so Im hoping this never gets changed with an update, like when we are not using any parts of the tag value (please).