如何以递归方式从目录中的所有图像中删除 exif 信息?

如何以递归方式从目录中的所有图像中删除 exif 信息?
for i in *.jpg; do echo "Processing $i"; exiftool -all= "$i"; done

我需要修改这行代码,删除目录中图像的所有 exif 信息。我需要它;

  • 如果当前目录为空则不会失败
  • 递归处理子目录
  • 封面 *.gif *.jpeg *.png 以及

有人能给我指出正确的方向吗?

答案1

无需编写脚本,ExifTool 可以自行完成,并且比循环遍历项目要快得多。
exiftool -r -all= -ext jpg -ext gif -ext png /path/to/top/directory/

-r通过子目录递归
-ext …将处理的文件限制为指定的扩展名,删除这些项以处理 Exiftool 可以删除元数据的所有文件。

答案2

由于 exiftool 很棒,所以就不需要它了,但原则上你可以用find类似这样的方法做......

首先检查您的搜索是否找到您想要的内容(使用 -iname 使其不区分大小写地搜索,因为 和.JPG.jpg都很常见)

find . -iname '*.jpg' -or -iname '*.png' -or -iname '*.jpeg' -or -iname '*.gif' 

如果将输出找到的文件列表,其路径从这里开始(包括子目录)

然后重复添加命令来对最后找到的文件进行操作| xargs exiftool -all=

find . -iname '*.jpg' -or -iname '*.png' -or -iname '*.jpeg' -or -iname '*.gif' | xargs exiftool -all=

如果文件名中有空格,则更安全,使用 null 作为分隔符而不是空格:

find . -iname '*.jpg' -print0 -or -iname '*.png' -print0 -or -iname '*.jpeg' -print0 -or -iname '*.gif' -print0 | xargs --null exiftool -all=

如果没有匹配项(例如目录为空),则不执行任何操作

.是当前工作目录。如果不在该目录,请替换find .find /path/to/parent/directory

相关内容