shell 写入xmp数据到所有jpeg文件在一个文件夹

tjjdgumg  于 2023-01-09  发布在  Shell
关注(0)|答案(3)|浏览(134)

如果我需要这个,谁能给我指个路
第一个月
为了工作数百个jpgs?所以我有一个foldeder与数百个jpegs和xmps具有相同的名称,但不同的文件结束(xmp和jpeg).什么将是优雅的方式来通过所有这些,并取代XYZ与实际的文件名?
我想/需要在osx上的shell中执行此操作。
是否需要像for循环这样的东西?或者在shell中是否有任何直接的方法?
提前感谢你!!

aelbi1ox

aelbi1ox1#

你的命令是

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

请参见元数据Sidecar文件示例#15。
-r-recurse)选项允许递归到子目录。如果不需要递归,请删除该选项。
-ext-extension)选项用于防止从XMP文件复制回XMP文件本身。
%d变量是当前正在处理的文件的目录。%f变量是没有该文件扩展名的基本文件名。然后xmp被用作扩展名。结果为找到的每个图像文件创建一个到同一目录中相应XMP文件的文件路径。这将适用于找到的任何可写文件(参见FAQ #16)。
此命令创建备份文件。添加-overwrite_original可禁止创建备份文件。
你不想像其他答案中所示的那样循环exiftool。Exiftool最大的性能损失是启动时间,循环它将增加处理时间。这是Exiftool常见错误#3。

xpcnnkqh

xpcnnkqh2#

通过以下方式解决了这个问题:

#!/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
fwzugrvs

fwzugrvs3#

恕我直言,一个优雅而简单的方法是使用GNU Parallel来并行执行所有这些操作:

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

如果看起来正确,请删除--dry-run并再次运行以真实的执行此操作。
{}仅表示“当前文件”
{.}仅表示 “不带扩展名的当前文件”
:::只是一个分隔符,后跟您希望GNU Parallel处理的文件的名称
您可以使用自制程序macOS上安装GNU Parallel

brew install parallel

相关问题