Last active
November 19, 2023 15:41
-
-
Save qin-yu/619b13da6f6f59f0a936a9e4032dc371 to your computer and use it in GitHub Desktop.
How to change the date of creation and the date of modification of files on macOS, based on filename (and add an offset).
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import os | |
import re | |
import subprocess | |
from datetime import datetime, timedelta | |
def set_creation_date(file_path, creation_date): | |
""" | |
Set the creation date of a file. | |
Parameters: | |
- file_path: The path to the file. | |
- creation_date: The desired creation date. | |
The creation_date parameter should be a string in the format 'YYYY-MM-DD HH:MM:SS'. | |
""" | |
try: | |
# Convert the creation date string to a datetime object | |
creation_datetime = datetime.strptime(creation_date, '%Y-%m-%d %H %M %S') | |
creation_datetime = creation_datetime + timedelta(days=18310, hours=19, minutes=34) | |
# Get the timestamp from the datetime object for os.utime | |
timestamp = creation_datetime.timestamp() | |
# Get the string from the datetime object for SetFile | |
timestring = creation_datetime.strftime("%m/%d/%Y %H:%M:%S") | |
# Set the access/modification date using the os.utime function | |
os.utime(file_path, (timestamp, timestamp)) | |
# Set the creation date using the SetFile command | |
subprocess.run(['SetFile', '-d', timestring, file_path]) | |
print(f"Creation date set successfully for {file_path}") | |
except Exception as e: | |
print(f"Error setting creation date for {file_path}: {e}") | |
def extract_creation_date_from_filename(filename): | |
""" | |
Extract the creation date from the filename. | |
This assumes that the filename follows a specific format that includes the creation date. | |
Modify the regular expression pattern as needed. | |
""" | |
pattern = r'(\d{4}-\d{2}-\d{2} \d{2} \d{2} \d{2})' | |
match = re.search(pattern, filename) | |
if match: | |
return match.group(1) | |
else: | |
return None | |
def process_files_in_folder(folder_path): | |
""" | |
Process all files in the specified folder. | |
Parameters: | |
- folder_path: The path to the folder containing the files. | |
""" | |
for filename in os.listdir(folder_path): | |
file_path = os.path.join(folder_path, filename) | |
# Check if the item in the folder is a file (not a subdirectory) | |
if os.path.isfile(file_path): | |
creation_date_from_filename = extract_creation_date_from_filename(filename) | |
if creation_date_from_filename: | |
set_creation_date(file_path, creation_date_from_filename) | |
else: | |
print(f"Creation date not found in the filename for {file_path}.") | |
# Example usage: | |
folder_path = '/Users/qin-yu/temp/' | |
process_files_in_folder(folder_path) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment