我有大约 100 个 .jpeg 图像,我想更改它们的文件时间戳。我见过很多touch
根据天数、小时数等修改时间戳的例子,但这些在我的情况下不起作用。
touch -d "-1969 days ago"
我曾尝试在其中一个文件上使用,但新时间已经很晚了——2021 年 7 月 10 日,而不是 2014 年 5 月 25 日。
有没有办法将目录中的所有文件时间戳更改为特定日期 (2014-05-25),同时保留日期时间戳的时间部分(在下面的示例中为 2:30 PM)?
例如,2009-01-02 02:30 PM 将时间戳更改为 2014-05-25 2:30 PM。
谢谢。
答案1
date
您可以使用和的组合touch
,此处为 GNU coreutils。
如果我没看错的话,你需要一个特定的日期并保留文件时间,就像在 HMS 中一样。未设置每个文件(例如当前值之前 300 天)。
您可以通过使用 将字符串2014-05-25
与从文件中提取的时间相结合来创建该时间date
,例如:
$ date +"2014-05-25 %T.%N" -r file.jpg
2014-05-25 18:06:28.277679656
然后通过执行以下操作进行组合:
for f in *.jpg; do touch -d "$(date +"2014-05-25 %T.%N" -r "$f")" "$f"; done
请注意,这可能会干扰 DST 和时区。
%z
另一种方法可能是在日期字符串末尾添加,或添加-u
到date
选项。
TZ=UTC0 touch -d "$(date -u +"2014-05-25 %T.%N" -r "$f")"
测试
测试、测试、行动前测试。检查ls --full-time
,回显而不是触摸等find ... -printf
也有时间/日期选项。
您甚至可以将时间备份到文本文件。
笔记:
来自问:
- 1969 天前是 2010 年 9 月 29 日。
- 1969 年以后的日子是 2021 年 7 月 11 日(至少在我的时区)。
- 要从
"-1969 days ago"
当前日期得到 2014 年 5 月 25 日,必须是 2019 年 10 月 15 日。
问题"-1969 days ago"
是你的时间前面有一个减号。
减号 + 减号 = 加号
要么删除减号,要么删除 ago
部分。
1969 days ago
是 2010 年 9 月 29 日,原样-1969 days