Bash touch - 非法选项 -d

Bash touch - illegal option -d

昨天我拍了一堆照片,但我忘了更改相机中的时区。现在所有图片的修改日期都错了

我想将特定目录中所有文件的修改日期更改为 minus 10 hours

#!/bin/sh
for i in /Users/slick/Desktop/100D5200/*; do
  touch -r "$i" -d '-10 hour' "$i"
done

当我 运行 这个脚本在 OSX 时,我得到

touch: illegal option -- d usage: touch [-A [-][[hh]mm]SS] [-acfhm] [-r file] [-t [[CC]YY]MMDDhhmm[.SS]] file ...

我做错了什么?

您正在使用 GNU touch 的选项。您可以在 OS X 中使用 Homebrew in OS X:

安装它
$ brew install coreutils

那么它将以 gtouch 而不是 touch 的名称提供:

#!/bin/sh
for i in /Users/slick/Desktop/100D5200/*; do
  gtouch -r "$i" -d '-10 hour' "$i"
done

但是,-d '10 hour'不会将时间戳后移十小时,而是将时间戳设置为当前时间减去十小时。如果要偏移时间戳,则必须对每个文件进行算术运算。

此外,您真正想要的可能是更改图片的 EXIF 数据,这需要另外一个工具而不是 touch

以下命令解决了我的问题:

exiftool "-AllDates-=10" /Users/slick/Desktop/100D5200
exiftool "-DateTimeOriginal>FileModifyDate" /Users/slick/Desktop/100D5200

显然在做之前

brew install exiftool

在 bash 脚本中尝试使用: $(touch -r "$i" -d '-10 小时' "$i")

它适用于我的 El Capitan