将XMP数据写入文件夹中的所有jpeg文件



如果我需要这个,谁能告诉我正确的方向?

exiftool -tagsfromfile XYZ.xmp -all:all XYZ.jpg

为数百jpg工作?因此,我有一个包含数百个具有相同名称但不同文件结尾(xmp和jpeg)的jpeg和XMPS的文件夹。浏览所有这些并将XYZ替换为实际文件名的优雅方法是什么?

我想/需要在osx的shell中做这个。

是否需要类似for循环的东西?或者在壳中有直接的方法吗?

提前谢谢你!!

您的命令将为

exiftool -r --ext xmp -tagsfromfile %d%f.xmp -all:all /path/to/files/

参见元数据Sidecar文件示例#15。

-r(-recurse)选项允许递归到子目录。如果不需要递归,请删除它。

-ext(-extension)选项用于防止从XMP文件复制回自己。

%d变量是当前正在处理的文件的目录。%f变量是没有扩展名的基本文件名。然后使用xmp作为扩展名。结果为找到的每个映像文件在同一目录中创建相应XMP文件的文件路径。这将适用于找到的任何可写文件(参见FAQ #16)。

该命令创建备份文件。添加-overwrite_original,禁止创建备份文件

您不希望像其他答案中那样循环exiftool。Exiftool对性能的最大影响是启动时间,循环它会增加处理时间。这是Exiftool常见错误#3。

是这样解决的:

#!/bin/bash
FILES="$1/*.jpg"
for f in $FILES; do
if [ -f "$f" ]; then
echo "Processing $f file..."
#cat "$f"
FILENAME="${f%%.*}"
echo $FILENAME
# exiftool -tagsfromfile "$FILENAME".xmp -all:all "$FILENAME".jpg
exiftool -overwrite_original_in_place -ext jpg -tagsFromFile "$FILENAME".xmp -@ xmp2exif.args -@ xmp2iptc.args '-all:all' '-FileCreateDate<XMP-photoshop:DateCreated' '-FileModifyDate<XMP-photoshop:DateCreated' "$FILENAME".jpg
else
echo "Warning: Some problem with "$f""
fi
done

一个优雅而简单的方法是使用GNU Parallel并行执行:

parallel --dry-run exiftool -tagsfromfile {.}.xmp -all:all {} ::: *.jpg

如果这看起来是正确的,删除--dry-run并再次运行以真正执行。

{}只是表示"当前文件">

{.}仅表示"当前文件,不包含扩展名">

:::只是一个分隔符,后面跟着你想要的文件名GNU Parallel流程


可以安装GNU ParallelmacOS家酿:

brew install parallel

最新更新