使用 bash 编辑元数据

使用 bash 编辑元数据

我有一堆照片(jpeg、bmp、png),我以这样的方式排列它们,元数据以 html 形式存放在单独的文件中。

我想创建一些脚本来读取此 html 文件并编辑照片“标签”字段(如果可能)。

我的图像排列如下:照片-“序列号”。(jped/bmp/png)。

元数据位于同一文件夹中,但文件名只是序列号,没有扩展名

在这个html文件中有这样一行:<meta name="keywords" content="tag1, tag2, tag3, etc" />

请注意,某些文件没有此额外文件,而某些图像可能已填充了 tag 字段。

我希望以批处理方式完成此操作。

如果您知道更好的方法(Windows/Linux),请告诉我。

答案1

未经测试,作为起点,您可以适应:

for pic in *.jpeg *.bmp *.png; do
  serial="${pic%.*}"
  if test -r "${serial#photo-}"; then
    tags=`sed -n 's/.*<meta name="keywords" content="\([^"]*\)".*/\1/p' "${serial#photo-}"`
    # do what you want with "$pic" using "$tags"
  fi
done

因此,您迭代所有图片文件,测试是否可以读取删除了前缀和扩展名的文件,然后从元数据文件中删除标签。我不确定您打算使用什么工具来编辑图片的元数据。

答案2

在处理所有文件之前,最好使用您最喜欢的 GUI 工具设置所需的字段。然后分析该文件出口工具:

exiftool -XMP:all -IPTC:all test.jpg

它将打印字段的确切名称。之后您可以批量处理所有文件。例如,要设置XMP:description,发出:

exiftool -XMP:description="the" test.jpg

替代方案是ImageMagick 包中的identify和 工具。convert

要从 html 中提取,我推荐使用 perl 包HTML树

test.html给定包含以下内容的文件:

<html><head>
<meta name="keywords" content="tag1, tag2, tag3, etc" />
</head>
<body></body>

运行此 perl 脚本来提取标签:

use HTML::TreeBuilder 5 -weak; # Ensure weak references in use
my $tree = HTML::TreeBuilder->new; # empty tree
$tree->parse_file("test.html");
my $meta = $tree->look_down(
  _tag => "meta",
  name => "keywords"
);
print $meta->attr("content");

相关内容