Bash for 循环中的 Exiftool 命令不起作用

Exiftool command in Bash for-loop not working

我正在尝试在 bash for 循环中使用 exiftool 写入和覆盖 jpg 元数据,但特定命令在循环中不起作用。我想用 datetimeoriginal 数据覆盖 gpstimestamp,这在命令行上执行时有效,但在脚本中无效..

for f in $(ls *.jpg); do

    [... stuff that works]

    exiftool "-gpstimestamp<datetimeoriginal" $f
done

知道为什么这在循环中不起作用吗?

for 循环可以用更简单的方式完成:

#!/bin/bash
for f in *.jpg
do

    [... stuff that works]

    exiftool "-gpstimestamp<datetimeoriginal" $f
done

Note: You instead of running a for loop, you can execute exiftool to process all *.jpg files in the directory using:

exiftool info

exiftool "-gpstimestamp<datetimeoriginal" -ext jpg .

exiftool man

-ext EXT (-extension) Process files with specified extension

Exiftool 不需要在循环中 运行 并且在没有 (Exiftool common mistake 3) 的情况下会 运行 快得多。

循环后直接使用此命令
exiftool '-gpstimestamp<datetimeoriginal' -ext jpg /path/to/target/dir

这将为目标目录中的所有 Jpg 文件复制 DateTimeOriginalGPSTimestamp。您可以添加 -r 以递归到子目录中。

您需要考虑的一件事是 GPSTimestamp 应该是 UTC 时间,而 DateTimeOriginal 通常是拍摄图像的时区。