Keep The Creation aka Birth Timestamp When Copying A File On A Mac In Python

November - 2021

NOTE: I'm not sure this is accurate. It looked like it when I first tested it, but I'm not sure now.

Leaving here until I can investigate further.

This is how you can make a copy of a file and maintain its "birth" time.

Note: I'm pretty sure you need XCode to get the SetFile command.


# this is the command to get the birth time of the inode
stat -f "%B" file_name
# and this is for the file modified time:
stat -f "%m" file_name

TODO: Formatting

import subprocess
import time

def copy_file_keeping_creation_date(source_path, dest_path):
    # TODO: Add error handling in all this
    creation_time =['stat', '-f', '%B', src_path], stdout=subprocess.
    date_string = time.strftime('%m/%d/%Y %H:%M:%S', time.localtime(int(creation_time)))
    copy2(src_path, dest_path)
    response =['SetFile', '-d', date_string, dest_path])
    # TODO: Make a better response

- copy2 copies the most metadata of the possible python options, but still doesn't do the birth time. 
- `rsync -a` doesn't copy it either. 
- TODO: show examples from `stat` command 
- TODO: put in details about the four times available for files. 



TODO: Look at adding an answer to this one:

TODO: Look at this answer and see if there's something in that pathlib that can be used for finding the data instead of using `stat` -

TODO: Look at `cp -p` to see what it perserves. According to the comment on this answer ( that's what copy2 is supposed to do. Check it with `stat` and see if it keeps the birth timestamp.