Bash touch - 非法选项 -d

Mat*_*cki 3 macos bash exif unix-timestamp

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

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

#!/bin/sh
for i in /Users/slick/Desktop/100D5200/*; do
  touch -r "$i" -d '-10 hour' "$i"
done
Run Code Online (Sandbox Code Playgroud)

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

touch:非法选项 --d 用法:touch [-A [-][[hh]mm]SS] [-acfhm] [-r file] [-t [[CC]YY]MMDDhhmm[.SS]] file 。 ..

我究竟做错了什么?

Dag*_*ahl 5

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

$ brew install coreutils
Run Code Online (Sandbox Code Playgroud)

然后它将在名称下可用,gtouch而不是touch:

#!/bin/sh
for i in /Users/slick/Desktop/100D5200/*; do
  gtouch -r "$i" -d '-10 hour' "$i"
done
Run Code Online (Sandbox Code Playgroud)

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

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