-
Notifications
You must be signed in to change notification settings - Fork 1
/
set_timestamps.py
57 lines (46 loc) · 2.41 KB
/
set_timestamps.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
"""Use filenames in google takeout for photos to set file modification time.
Helps nextcloud figure out what's going on when you just copy a takeout
into your nextcloud data directory.
"""
import os
import re
import time
import datetime
def process_file(filename, directory):
"""Set file modification time to whatever is in filename."""
match = re.match(r'IMG_(?P<year>[0-9]{4})(?P<month>[0-9]{2})(?P<day>[0-9]{2})_(?P<hour>[0-9]{2})(?P<minute>[0-9]{2})(?P<second>[0-9]{2})', filename)
if match:
integer_match = {k: int(v) for k, v in match.groupdict().items()}
file_date = datetime.datetime(**integer_match)
mod_time = time.mktime(file_date.timetuple())
os.utime(directory + '/' + filename, (mod_time, mod_time))
return
match = re.match(r'(?P<year>[0-9]{4})(?P<month>[0-9]{2})(?P<day>[0-9]{2})_[0-9]{4}', filename)
if match:
integer_match = {k: int(v) for k, v in match.groupdict().items()}
file_date = datetime.datetime(**integer_match, second=0)
mod_time = time.mktime(file_date.timetuple())
os.utime(directory + '/' + filename, (mod_time, mod_time))
return
match = re.match(r'(?P<year>[0-9]{4})-(?P<month>[0-9]{2})-(?P<day>[0-9]{2}).jpg', filename)
if match:
integer_match = {k: int(v) for k, v in match.groupdict().items()}
file_date = datetime.datetime(**integer_match, second=0, minute=0, hour=0)
mod_time = time.mktime(file_date.timetuple())
os.utime(directory + '/' + filename, (mod_time, mod_time))
return
match = re.match(r'(?P<year>[0-9]{4})-(?P<month>[0-9]{2})-(?P<day>[0-9]{2})', directory)
if match:
integer_match = {k: int(v) for k, v in match.groupdict().items()}
file_date = datetime.datetime(**integer_match, second=0, minute=0, hour=0)
mod_time = time.mktime(file_date.timetuple())
os.utime(directory + '/' + filename, (mod_time, mod_time))
return
def process_directory(directory):
"""Recursively process files/directories."""
for file in os.listdir(directory):
if os.path.isdir(file):
process_directory(file)
else:
process_file(file, directory)
process_directory('.')