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