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
昨天我拍了一堆照片,但我忘了更改相机中的时区。现在所有图片的修改日期都错了
我想将特定目录中所有文件的修改日期更改为 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