计算原始图像数据的哈希并将其写入图像文件

时间:2018-12-29 18:34:04

标签: sha exiftool

我正在尝试将哈希写入图像文件的元数据部分。在Exiftool Forum中,我看到了

exiftool FILE -rawimagedigest=`exiftool FILE -all= -o - | md5`

但是,我不想为每个文件手动运行它,并且我更喜欢SHA。

我尝试过

find . -name "*" -exec sh -c '
    md5hash=$(exiftool "$1" -all= -m -o - | md5)
    sha256hash=$(exiftool "$1" -all= -m -o - | shasum -a 256)
    exiftool -overwrite_original "$1" -FileImageMd5=$md5hash;
    exiftool -overwrite_original "$1" -FileImageSha256=$sha256hash
    ' _ {} \;

使用example file创建了一个配置,使其可以写入FileImageMd5和FileImageSha256。但是,该脚本只能在没有

行的情况下工作
exiftool -overwrite_original "$1" -FileImageSha256=$sha256hash

如果最后用$ md5hash替换变量,它将按预期运行。

配置文件名为.ExifTool_config并放置在$ HOME中。它由以下内容组成

%Image::ExifTool::UserDefined = (
    'Image::ExifTool::XMP::Main' => {
        rlp => {
            SubDirectory => {
                TagTable => 'Image::ExifTool::UserDefined::rlp',
            },
        },
    },
);

%Image::ExifTool::UserDefined::rlp = (
    GROUPS => { 0 => 'XMP', 1 => 'XMP-rlp', 2 => 'Image' },
    NAMESPACE => { 'rlp' => 'http://ns.ladekjaer.org/rlp/1.0/' },
    WRITABLE => 'string',
    FileUniqueId => { Writable => 'lang-alt' },
    FileImageSha256 => { Writable => 'lang-alt' },
    FileImageMd5 => { Writable => 'lang-alt' },
);

1;  #end

1 个答案:

答案 0 :(得分:0)

显然该脚本由于以下原因而失败

shasum -a 256

结束其输出
  -

由于用十六进制编写的SHA256始终为64个字符,因此可以通过添加来解决

 | head -c 64

因此编写脚本

find . -name "*" -exec sh -c '
    md5hash=$(exiftool "$1" -q -all= -m -o - | md5)
    sha256hash=$(exiftool "$1" -q -all= -m -o - | shasum -a 256 | head -c 64)
    exiftool -overwrite_original -q "$1" -FileImageMd5=$md5hash;
    exiftool -overwrite_original -q "$1" -FileImageSha256=$sha256hash
    ' _ {} \;