macos - Bash touch - 非法选项 -d

标签 macos bash unix-timestamp exif

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

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

#!/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 的选项。您可以使用 Homebrew 在 OS X 中安装它在 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 的其他工具。

关于macos - Bash touch - 非法选项 -d,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34465205/

相关文章:

java.time : Compare two Instants - get the number of hours, 两者之间的分、秒、年、月

linux - 如何在 unix 中更改 .csv 文件中的日期格式

macos - 为什么host_statistics64()会返回不一致的结果?

bash - 持续运行 bash 脚本

bash 命令跨越多行,中间有几行注释

linux - 使用shell脚本从字符串中提取信息

php - 如何将当前日期传递给 PHP 函数并在 SQL 查询的 where 条件中使用它?

macos - 焦点跟随Mac Sierra中的鼠标(不自动提升)

xcode - 如何对基于 View 的表进行排序?

java - Java 8 Eclipse 未设置 Root 错误