我一直想出一个脚本来从等于“OLYMPUS DIGITAL CAMERA”的JPEG文件中删除任何EXIF/IPTC/XML元数据。对于那些不知道的人,奥林巴斯相机在所有照片中都设置了这个属性,没有关闭它的选项。更糟糕的是,虽然我已经设置了 Lightroom 预设以在导入时或在编辑现有图像时将其删除,但在最近的 LR 版本中似乎存在一个错误,在导出图像时仍将属性嵌入到 ImageDescription、Caption-Abstract 和 Description 中图像为 JPEG。
因此,像许多 Olympus 用户一样,我希望它永远被淘汰,并且我编写了一个非常简单的 bash 脚本来做到这一点。它主要设计用于在我的 QNAP NAS 上运行,但可以轻松修改以在不同环境中工作。它在特定图像的 exiftool 输出中搜索“OLYMPUS DIGITAL CAMERA”的任何实例,然后删除该属性。
#!/usr/bin/env bash
IFS=$'\n'; ## Handle spaces in file paths/names
directory="/share/CE_CACHEDEV1_DATA/homes/admin/Images/Final Albums/"
exiftool="/share/CE_CACHEDEV1_DATA/.qpkg/Entware/bin/exiftool"
find="/opt/bin/find"
for f in $($find "$directory" -type f -iname '*.jp*g');
do
#echo "$f"
for field in $($exiftool -s "$f" | grep "OLYMPUS DIGITAL CAMERA" | awk -F: '{ print $1 }' | sed 's/ *$//g');
do
echo "Removing $field on $f"
$exiftool -overwrite_original -"$field"= "$f"
done
done
唯一的问题是它很慢。对 exiftool 的任何调用似乎都需要 0.5 秒,因此我想通过一次性删除所有属性来提高效率,而不是循环每个匹配的属性并逐个删除它们。所以这是脚本的第 2 版。
#!/usr/bin/env bash
IFS=$'\n'; ## Handle spaces in file paths/names
directory="/share/CE_CACHEDEV1_DATA/homes/admin/Images/Final Albums/"
exiftool="/share/CE_CACHEDEV1_DATA/.qpkg/Entware/bin/exiftool"
find="/opt/bin/find"
for f in $($find "$directory" -type f -iname '*.jp*g');
do
#echo "$f"
fieldstring=''
for field in $($exiftool -s "$f" | grep "OLYMPUS DIGITAL CAMERA" | awk -F: '{ print $1 }' | sed 's/ *$//g');
do
fieldstring="${fieldstring}-$field= "
done
echo $fieldstring
$exiftool -overwrite_original $fieldstring $f
done
问题是它似乎一次只删除一个属性。$fieldstring 的输出是:
-ImageDescription= -Caption-Abstract= -Description=
但是我也尝试过用单引号和双引号包围要删除的标签,但都没有帮助。
我想这可能是 eximtool 的限制。但是我编写了另一个脚本,它只是擦除了 3 个主要属性(ImageDescription、Caption-Abstract 和 Description),而没有对它们包含的内容进行任何测试,而且效果很好!
#!/usr/bin/env bash
IFS=$'\n'; ## Handle spaces in file paths/names
directory="/share/CE_CACHEDEV1_DATA/homes/admin/Images/Final Albums/"
exiftool="/share/CE_CACHEDEV1_DATA/.qpkg/Entware/bin/exiftool"
find="/opt/bin/find"
for f in $($find "$directory" -type f -iname '*.jp*g');
do
echo "$f"
$exiftool -overwrite_original -"Description"= -"Caption-Abstract"= -"ImageDescription"= "$f"
done
所以我很确定这是我犯的那些愚蠢的、直接犯下的错误之一,但经过 2 小时的努力想弄清楚,我不知所措。谁能发现一个愚蠢的错误?我已经输出了 $fieldstring 并且对我来说看起来不错,所以我认为这是我缺少的 bash 脚本,因此在这里发布!
非常感谢!