测试

测试

我有大约 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另一种方法可能是在日期字符串末尾添加,或添加-udate选项。

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

相关内容