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.
You can also watch this video at YouTube (but with ads).
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).