So I have a bunch of pictures that have incorrect creation dates but their real creation dates are the same as the current modification dates. Is it possible to correct this using some batch command in terminal? I've been messing around with the setFile + stat commands but it's not really working out since I'm terrible with terminal. Does anyone here now the correct way to do this?

Also is it possible to incorporate this into a find command? So that all pics with "IMG" in them get this treatment but no others?

Thanks in advance!

  • What do you mean by "creation date"? Is it the "Birth" date as shown by stat? May 7, 2019 at 13:42
  • Yes the Birth date.
    – emileber
    May 7, 2019 at 13:54
  • or the date set by setFile -d I'm assuming they're the same?
    – emileber
    May 7, 2019 at 13:59

2 Answers 2


To use @user3439894's answer with find, use the -exec command {} + clause, and put the for loop into a sh script:

find some/path -iname \*.img -exec sh -c 'for f in "$@"; do m="$(GetFileInfo -m "$f")"; SetFile -m "$m" -d "$m" "$f"; done' sh {} +

The 2nd "sh" will become the $0 inside the spawned shell, and the .img filenames will be the positional parameters $1, $2, ...


If you have both SetFile and GetFileInfo, you can set the creation date to that of the modified date on .IMG files by doing the following:

In Terminal, first change directory cd to the location of the target .IMG files.

cd /path/to/target/files

Then execute the following compound command:

for f in *.[iI][mM][gG]; do m="$(GetFileInfo -m "$f")"; SetFile -m "$m" -d "$m" "$f"; done

Note: It is always a good idea to first test on a small sample of the target files copied to another folder and check the results first, then proceed on the original files. One should also always have normal regular backups as well before proceeding, e.g using Time Machine or other backup software.

If you do not have GetFileInfo and want to use stat, then directly after do replace:

m="$(GetFileInfo -m "$f")";


m="$(stat -f'%Sm' -t "%m/%d/%Y %H:%M:%S" "$f")";

Giving you the full compound command:

for f in *.[iI][mM][gG]; do m="$(stat -f'%Sm' -t "%m/%d/%Y %H:%M:%S" "$f")"; SetFile -m "$m" -d "$m" "$f"; done

Note: This assumes you do have at least one .IMG file in the directory, otherwise it causes a non-fatal error, meaning nothing has changed:

stat: *.[iI][mM][gG]: stat: No such file or directory
ERROR: invalid date/time

To use find, see glenn jackman's answer.

  • 1
    I think you want your stat statement like this-> stat -f'%Sm' -t "%m/%d/%Y %H:%M:%S" FILE.
    – fd0
    May 7, 2019 at 15:42
  • @d0, Thanks, that is much better! May 7, 2019 at 15:47

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .