Bash touch - 非法选项 -d

3

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

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

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

当我在OSX上运行此脚本时,我收到以下信息:

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

我做错了什么?

2
我并不是一个OSX用户,但我认为这个话题对你可能会有用:http://apple.stackexchange.com/questions/99536/changing-creation-date-of-a-file - monsune
which touchtouch --versiontouch --help这些命令会给你什么信息?我猜测你没有使用GNU touch,因此你的版本缺少--d选项。 - mnagel
1
我做错了什么?期望有一个非标准的、特定于平台的扩展可用。 - Andrew Henle
阅读man touch可能是值得的。 - rici
3个回答

5

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

$ 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 不同的工具。


@Camaleo 我错了,我不知道我是用 brew 安装的。 - Dag Høidahl

2

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

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

显然在进行之前

brew install exiftool

0
在Bash脚本中尝试使用: $(touch -r“$i”-d'-10小时'“$i”)
在El Capitan上对我有效。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接