Note: This site is currently "Under construction". I'm migrating to a new version of my site building software. Lots of things are in a state of disrepair as a result (for example, footnote links aren't working). It's all part of the process of building in public. Most things should still be readable though.

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

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.

NOTE:

Code

# 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

```python3 import subprocess import time

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

Notes:

- 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.

links:

- https://apple.stackexchange.com/a/99599/7828 - https://stackoverflow.com/a/56009590/102401

TODO: Look at adding an answer to this one:

https://stackoverflow.com/questions/56008797/how-to-change-the-creation-date-of-file-using-python-on-a-mac

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` - https://stackoverflow.com/a/52858040/102401

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