Вычисление хэшей необработанных данных изображения и запись их в файл изображения - PullRequest
0 голосов
/ 29 декабря 2018

Я пытаюсь записать хэши в часть метаданных моих файлов изображений.На форуме Exiftool я видел это

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
    ' _ {} \;

Используя файл примера Я создал конфигурацию, позволяющую писать в 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 голосов
/ 31 декабря 2018

Очевидно, что скрипт завершился неудачно из-за того, что

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
    ' _ {} \;
...