exiftool not using $PATH to find setfile?

Started by Jan Steinman, September 20, 2022, 01:44:04 PM

Previous topic - Next topic

Jan Steinman

I have an old, extensively upgraded Mac Pro that won't install anything newer than MacOS 10.15.7, even with patch kits.

This means my install of developer tools (done long ago) didn't include /usr/bin/setfile, and attempting to run xcode-select --install tells me xcode-select: error: command line tools are already installed, use "Software Update" to install updates. And Software Update refuses to update Xcode unless I also update my OS. So I cannot assign the pseudo-tag -FileCreateDate.

I do have /Applications/Xcode.app/Contents/Developer/Tools/SetFile. But attempting to link it to /usr/bin/setfile results in ln: /usr/bin/setfile: Read-only file system, even with sudo or as root. System Integrity Protection is disabled.

I suppose I could do something tricky to mount that file system read-write, but I was easily able to ln -s Applications/Xcode.app/Contents/Developer/Tools/SetFile /usr/local/bin/setfile with no trouble, without even sudo.

But when I try to run exiftool "-filecreatedate=1950:10:26 00:00:00" file.png I get Warning: Error 32512 running "/usr/bin/setfile" to set FileCreateDate - file.png
    0 image files updated
    1 files weren't updated due to errors

So, it appears that exiftool isn't respecting the $PATH variable? Is there any way around this, besides something like booting up some other partition, mounting my boot disk read-write, and properly linking in /usr/bin/setfile?

Thanks in advance for your help, and sorry that this seems to me mostly a MacOS configuration issue... I can understand why you would want an absolute path for executables you run...

Phil Harvey

Yes, ExifTool requires setfile to be in /usr/bin.

The easy fix is to modify lib/Image/ExifTool/MacOS.pm (line 384) to change the setfile path.

- Phil
...where DIR is the name of a directory/folder containing the images.  On Mac/Linux/PowerShell, use single quotes (') instead of double quotes (") around arguments containing a dollar sign ($).