如果我需要这个,谁能告诉我正确的方向?
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 Parallel在macOS与家酿:
brew install parallel