我正在尝试找到一种方法来过滤数千个 jpg 文件,并仅保留具有特定属性的文件(例如捕获图片的相机品牌)。我怎样才能这样做呢?
答案1
有几种工具可以提取EXIF数据,甚至根据 EXIF 数据操作图像文件。
和出口工具,您可以根据 exif 属性重命名文件。特别是,您可以轻松地将文件分派到以特定 exif 属性命名的子目录中。然后,您可以查看结果并删除包含您不感兴趣的文件的目录。
exiftool '-Directory<${Model}/%d' -r .
Exiftool 使这变得简单,但为了说明,这里有一个 shell 片段,它使用 EXIF 属性将 jpeg 文件排序到子目录中exif。属性值不得包含/
字符。您可以-t
通过运行找出该选项的编号exif -l
。
for f in *.jpg; do
v=$(exif -m -t 0x0110 -- "$f" 2>/dev/null)
if [ -n "$v" ]; then
mkdir -p -- "$v"
mv -- "$f" "$v"
fi
done
和Exiv2,将该v=…
行替换为v=$(exiv2 -g Exif.Image.Model -Pv -- "$f")
。
如果您的文件已组织在目录树中,请调用find
以递归方式遍历目录树。假设您的所有图像都位于名为 的目录下unknown
。下面的代码片段为每个图像模型创建一个目录并复制文件,镜像原始目录层次结构。
find unknown -name '*.jpg' -exec sh -c '
v=$(exif -m -t 0x0110 -- "$f" 2>/dev/null)
[ -n "$v" ] || exit
d=${0#*/}; d=${d%/*}
mkdir -p -- "$v/$d"
mv "$0" "$v/$d"
' {} \;