You can use a shell script inside an Automator Quick Action to add the date of a file to the beginning of the file's name. You can also make this work with photos using the date the photo was taken from the metadata in the file. As a Quick Action you can easily apply this name change to one or many files at once.
Shell script for renaming by file date:
for f in "$@" do filedate=$(date -r $(stat -f %B $f) +%Y-%m-%d); filename=$f:t filepath=$f:h mv $filepath/{"$filename","$filedate $filename"} done
Shell script for renaming by photo metadata date:
for f in "$@" do filedate=$(mdls $f | grep kMDItemContentCreationDate -m 1 | awk '{print $3}'); filename=$f:t filepath=$f:h mv $filepath/{"$filename","$filedate $filename"} done
Felt obligated to comment since this is just the kind of content I enjoy. Someday I'll be looking for a way to get a photo's taken date into a script and I now have a solution. Thanks, Gary.
Excellent tip; I've just renamed more than 6,000 photos I couldn't organize by year without this. I tripped over trying to type in the terminal work before discovering I only needed to copy/paste your Automator Script. A+
Fantastic solution, Gary, and you have managed to introduce these complex concepts in an easily-understandable way. Thank you!
How can I modify the shell script to have the filedate but not including the original filename as the output.
In other words, I would like to original file to be renamed as: 12-27-1995.jpg
Dan: Instead of the renaming going to "$filedate $filename" just have it as "$filedate.jpg"
When I run it the name moves one space to the right and stops.
It works on external discs. I have a personal cloud Drive that it is not working on must be some kind of permission problem. Thanks for the info.
Thanks Gary, this is exactly what I've been looking for. A couple of questions though.
i) I can't work out how to concatenate the date and the time with an underscore separating the two.
ii) The date seems to be returned as a UTC value, not what is in the EXIF info
iii) Rather than having colons as a separator between the hours minutes and seconds, forward slashes (/) are substituted
iv) How can I remove the separators in both the date and time fields?
Many thanks.
I'm getting spaces like Al was. When I do mdls on a file directly by dropping it into terminal, there are only 15 constants displayed as null or empty and no kMDItemContentCreationDate listed. I'm running Mojave and suspect t his may be a Catalina only command.
Very useful! Can't wait to try it! Thanks Gary.
Peter: That's going to take some string processing in your script. It is all possible, but only if you take the time to learn some more programming. Alternatively, you could use a regular batch rename in the Finder to do things like replace spaces with _. UTC is probably what is really in the EXIF info, you just see a converted value in Preview. I'm thinking there is probably a way to convert the string date in the shell script too, but it will take more research.
Good video Gary. Can you do this inside the Photos App?
Gene: No. You can't even set the file name of a photo manually inside the Photos app.
This is nice and a great explanation. Can Automator be used to stuff the 'real' date of a photo into the metadata field for the date the picture was taken? I've scanned pictures and they have a created/modified date in 2019 but I would like to identify them with the real point in time for which the picture was taken (i.e., our wedding date.)
Dennis: Possibly. But it will get a lot more complex. A Google search came up with some things, but I haven't investigated them.
Congratulations Gary, this is what I've been looking for since apple abandoned Aperture. (In Aperture, there was a sophisticated renaming tool for files upon import).