如何使用Python脚本更改多个文件的创建日期?

问题描述 投票:0回答:2

当我将照片从 iPad 导入到硬盘时,我错误地将它们导入为当天的创建日期。

所以现在每张照片的真实日期是它的修改日期。我基本上使用此命令来

Setfile -d "$(GetFileInfo -m _FILE_PATH_)" _FILE_PATH_
将照片的创建日期设置为其修改日期。但我想知道是否有办法将此命令行放入 python 脚本中,以便我可以批量选择多张照片来执行此操作。

另外,由于如果我打开任何照片,系统都会更改其修改日期,因此我可以猜测某些照片属于哪个日期的唯一方法是按名称对它们进行排序,以查看其之前和之后的照片属于哪个日期。

关于如何编写一个脚本,根据照片之前和之后的照片推断出日期大于特定日期的照片的真实日期,有什么想法吗?

例如,您在屏幕截图中看到,10 月 5 日的两张照片之间有一张 5 月 8 日的照片,所以显然它也应该是在 10 月 5 日拍摄的。 但不幸的是有时照片前后的照片修改日期也是错误的,所以我认为程序必须寻找照片前后最小的日期来推断真实日期。

更新

我在 python 上编写了这段代码,当我将它们拖放到终端中以给程序提供路径时,它对于单个文件工作得很好。我想知道是否有办法对多个文件执行此操作。

from subprocess import call
import os

path = input("enter filepath: ")
info = '"$(GetFileInfo -m '+ path + ')" '
command = 'Setfile -d ' + info + path
print('Setfile -d ' + info + path)
call(command, shell=True)
python macos shell sorting datetime
2个回答
1
投票

不需要交互式输入可能是一个至关重要的改进,这样您就可以同时在大量文件上运行它。在 Python 中执行此操作的方法是使用

sys.argv

此外,不要使用

subprocess.call
,而是使用
subprocess.check_call
(或
subprocess.check_output
来获取输出),这样您就可以避免调用 shell,并检查子进程是否成功完成。 (如果没有,将会有一个回溯;如果您想要更用户友好的内容,请将其包装在
try
/
except
中。可能会在发布另一个问题寻求帮助之前先查找现有问题。)

from subprocess import check_output, check_call
from sys import argv

for path in argv[1:]:
    date = check_output(['GetFileInfo', '-m', path])
    check_call(['Setfile', '-d', date, path])

像这样使用

python3 script.py file1.png /path/to/file2.png ../elsewhere/file3.png ...

(相对路径从当前工作目录开始解析;没有路径解析到当前目录。)


0
投票

创建了一个类似的脚本,如果有人觉得有用,它会自动更改所有随附文件的日期:https://github.com/kyrxanthos/DateSync.git

© www.soinside.com 2019 - 2024. All rights reserved.