我有一堆照片(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");