Shell脚本通过jpg文件属性过滤

Shell脚本通过jpg文件属性过滤

我正在尝试找到一种方法来过滤数千个 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"
' {} \;

相关内容