How to copy images to specific (absolute path) folder?

Started by Moonbase59, April 11, 2022, 09:26:48 AM

Previous topic - Next topic

Moonbase59

Using exiftool 12.30-1 on Manjaro Linux, I'm trying to copy images from arbitrary folders into my /home/matthias/Bilder folder, using a YYYY/YYYY-MM/YYYY-MM-DD/YYYYMMDD-hhmmss.ext scheme.

For some reason, this doesn't work out—the best I could get is subfolders inside my current folder.

Starting out in the /home/matthias/Bilder/Testbilder/ folder, I tried these commands:


exiftool -P -o ~/Bilder/ -d '%Y/%Y-%m/%Y-%m-%d/%Y%m%d-%H%M%S' '-FileName<${MWG:CreateDate}-${Model}%-c.%le' 20080206-035955-EX-Z80.jpg
    1 directories created
    1 image files copied

(creates 2008/2008-02/2008-02-06/20080206-035955-EX-Z80.jpg inside the current folder),


exiftool -P -o -d '/home/matthias/Bilder/%Y/%Y-%m/%Y-%m-%d/%Y%m%d-%H%M%S' '-FileName<${MWG:CreateDate}-${Model}%-c.%le' 20080206-035955-EX-Z80.jpg
Warning: Error opening file - /home/matthias/Bilder/%Y/%Y-%m/%Y-%m-%d/%Y%m%d-%H%M%S
Error: Error opening file - /home/matthias/Bilder/%Y/%Y-%m/%Y-%m-%d/%Y%m%d-%H%M%S
    0 image files updated
    1 image files copied
    1 files weren't updated due to errors

(creates a file 2008:02:06 03:59:55-EX-Z80.jpg inside the current folder).

Where and how should I specify an absolute path for the images to be copied or moved to?

StarGeek

The clue is in the error, exiftool is trying to create a file "%Y-%m-%d/%Y%m%d-%H%M%S".  That means it's not reading that as a date string.

The reason for that is that you are using the -o (-out) option without the OUTFILE or FMT parameter, so it ends up using the -d as that parameter.

Since you are writing to the Filename pseudo-tag, then this line in the -o docs is important (emphasis mine)
     When writing only FileName and/or Directory "pseudo" tags, -o causes the file to be copied instead of moved, but directories specified for either of these tags take precedence over that specified by the -o option.

You still need to include a directory name as the second -o parameter, but it will be ignored.  The most common thing to do here is to use a dot . for the current directory, since that's nice and short.

The -o option can be tricky.  Examples #5, #9, #10, and #11 on the Writing "FileName" and "Directory" tags page are worth looking over to help understand it.
"It didn't work" isn't helpful. What was the exact command used and the output.
Read FAQ #3 and use that cmd
Please use the Code button for exiftool output

Please include your OS/Exiftool version/filetype

chuck lee

Thanks for StarGeek's answer.  I looked through the manual again and tried error for a while.  Finally, I found out the  miss  dot(.) is necessary.

exiftool -P -o . '-directory<createdate' -d /home/chuck/lee/%Y/%m/%d  8.jpg

The above command works well.  I learned more from both of you.  Thanks.

Moonbase59

Thanks for the info @StarGeek, very helpful!

I succeeded using this:

exiftool -P -o . -d "$HOME/Bilder/%Y/%Y-%m/%Y-%m-%d/%Y%m%d-%H%M%S" '-FileName<${MWG:CreateDate}-${Model}%-c.%le' 20080206-035955-EX-Z80.jpg


Note 1: Linux users might expect a folder path of ~/Bilder/... to work. It does not but instead creates a folder ~ within the current folder.

Note 2: Double apostrophes " for the date string MUST be used for Linux to expand the $HOME environment variable in this case; otherwise, you'll end up with a folder named $HOME inside the current folder.

Note 3: Leaving out the "-o ." part will result in moving the file, instead of copying it.

Note 4: If, for some reason, you'd wish to use above in a crontab, $HOME won't be defined and you'd have to change that against /home/$USER. ($USER is defined in most Linux' crontab environments.)