LINUX.ORG.RU

контрольная сумма md5sum эскизов (thumbnails)

 , ,


0

1

существует стандарт для расчета контрольной суммы эскиза посредством md5sum, но в некоторых файловых менеджерах(dolphin, deepin-FM) она считается каким-то другим способом.
Например для файла, абсолютный путь которого file:///media/home/file.mkv nautilus и caja создают фал эскиза с именем 682433b1f02832783d4cb739d2e705ff.png, что соответствует стандарту,

echo -n "file:///media/home/file.mkv" | md5sum
682433b1f02832783d4cb739d2e705ff -

а вот dolphin создает для этого файла эскизы с именами 682433b1f02832783d4cb739d2e705ff.png, 33a417e81b4f8894d1a23406e827a23b.png и 44feee170f71b4894f399af9f5a8eb33.png, deepin-FM создает файл с именем 668464f69987d58a1062a34490fc4dec.png.
Внимание вопрос, каким образом(желательно команду или ссылку на стандарт) рассчитываются контрольные суммы в файловых менеджерах dolphin и deepin-FM?



Последнее исправление: agafron (всего исправлений: 3)
Ответ на: комментарий от agafron

ну, если я правильно понял, то файлы png создаются разными программами, если хеш сумма разная, значит файлы разные, если изображение идентично, то метаданные могут различаться. Я не очень понял, что такое файл-эскиз, но сверьте файлы какими-нибудь hex редакторами

IvanRia
()
Ответ на: комментарий от Fafhrd

Я в том смысле, что добавляют к строке пути какой-нибудь префикс с целью получения уникальных md5 на случай если другое приложение будет создавать свои эскизы. Это предположение, может так страхуются от их удаления, например пользователь из приложения, допустим вьювера картинок, захочет подчистить кэш.

"file:///home/user/Pictures/1.png"      : 9E1CB41E7B11E5FA2505BDB494A43B94.png
"㐆㐈_file:///home/user/Pictures/1.png" : A28AB93355AB389D90DFE9DF0F652AD1.png
dmitry237 ★★★★
()
Последнее исправление: dmitry237 (всего исправлений: 2)
Ответ на: комментарий от agafron

Как-нибудь так, вопрос только куда и как они инод добавляют в строку:

 $ stat -c "%ifile://%n" ~/.bashrc | md5sum
0638501ce4a69e60bc085b1eedc8b174  -

dmitry237 ★★★★
()
Последнее исправление: dmitry237 (всего исправлений: 1)
Ответ на: комментарий от dataman
$ echo a > x
$ stat --file-system -c%T x
btrfs
$ echo a > x
$ stat -c%i:%y x
5679679:2022-12-12 09:04:34.149150813 +0100
$ echo b > y && mv y x  # заменить другим
$ stat -c%i:%y x  # inode другой, инвалидировать кеш надо
5679682:2022-12-12 09:04:41.928906313 +0100
$ echo c > x  # перезаписать
$ stat -c%i:%y x  # inode тот же, инвалидировать кеш все равно надо
5679682:2022-12-12 09:04:46.800753250 +0100
t184256 ★★★★★
()
Ответ на: комментарий от dataman

Поправил :)

Фигню поправил, расправь обратно.

inode сменился? Значит это другой файл, миссия по перезаписи оригинального файла провалена.

И на тысячах файлов получим жуткие тормоза, особенно на видео.

От чего? От нехеширования невтемачного inode может стать только быстрее.

t184256 ★★★★★
()
Ответ на: комментарий от t184256
$ echo a > x
...
$ echo c > x  # перезаписать

У тебя тот же файл, но с другим содержимым. Поэтому и inode не изменился. Но тут и правда вопрос, поправили файл в редакторе, как узнать, что нужно обновить эскиз? Наверное правильно будет время модификации добавлять в хэш.

Loki13 ★★★★★
()
Ответ на: комментарий от Loki13

echo c > x # перезаписать

У тебя тот же файл, но с другим содержимым.

Да. Такая вот замена содержимого с сохранением идентичности называется «перезаписать файл».

Наверное правильно будет время модификации добавлять в хэш.

Правильнее сравнивать время модификации, чтобы узнать, что пора инвалидировать кэш, но это вопрос ортогональный вопросу «что там забыл inode».

t184256 ★★★★★
()
Последнее исправление: t184256 (всего исправлений: 1)
Ответ на: комментарий от IvanRia

Более вероятно. Начать с того, что тумбнаилы создаются нескольких размеров, маленькие, средние, большие. Во-первых, сравнить размеры, в смысле разрешения картинок. Во-вторых, в данном случае понятие «идентичное изображение» очень размыто. Чуть измени дефолтный уровень сжатия. На глаз будут идентичны, но абсолютно разные по коду, по хешу.

andytux ★★★★★
()
Последнее исправление: andytux (всего исправлений: 2)
Ответ на: комментарий от andytux

можно еще повернуть на пол градуса, на глаз не заметно, так стеганографические данные, вшитые в картинку можно изничтожать, повернул картинку на пол градуса и все спрятанное похерилось

IvanRia
()
Последнее исправление: IvanRia (всего исправлений: 1)
Ответ на: комментарий от dmitry237

немного не понял, как это применительно на конкретном пути, например file:///media/home/file.mkv?
stat -c "file:///media/home/file.mkv" ~/.bashrc | md5sum
02fdd95f34c50cc94c15d81d6bfd1c5f -
не дает ожидаемый кеш.
682433b1f02832783d4cb739d2e705ff.png, 33a417e81b4f8894d1a23406e827a23b.png 44feee170f71b4894f399af9f5a8eb33.png

agafron
() автор топика
Ответ на: комментарий от andytux

судя по стандарту размер не имеет значения, кеш должен формироваться из абсолютного пути, поэтому само содержимое не влияет на это, а в зависимости от размера файлы просто должны помещаться в каталоги normal и large

agafron
() автор топика
Ответ на: комментарий от agafron

немного не понял, как это применительно на конкретном пути, например file:///media/home/file.mkv?

stat -c "%ifile://%n" /media/home/file.mkv | md5sum

# %i  inode
# %n  file

Вопрос в другом, вы не знаете, какой формат строки используется для получения md5. Только путем практического перебора и сравнения всех возможных (разумных) вариантов можно натолкнуться на правильный формат и получить нужный md5-хэш:

0123456-file:///media/home/file.mkv
0123456_file:///media/home/file.mkv
file:///media/home/file.mkv-0123456
/media/home/file.mkv(0123456)
и т.д.
dmitry237 ★★★★
()
Ответ на: комментарий от agafron

Можно просто его посмотреть:

stat -c "%i" исходный_файл_для_эскиза.mkv

Но хэш может браться не из названия, а из содержания файла:

md5sum file.mkv

Попробуйте сравнить с этим.

dmitry237 ★★★★
()
Последнее исправление: dmitry237 (всего исправлений: 1)
Ответ на: комментарий от agafron

в какую именно строку?

Из которой берется md5, вы говорите, что это «file://путь к файлу», так ли это, я не знаю. Используется ли при этом inode файла, тоже под вопросом, тем более, что как я понимаю, этот mkv находится в другой файловой системе. И его inode (11) не характерен для локальных файлов. У меня иноды такого порядка в /tmp c tmpfs.

dmitry237 ★★★★
()

Час два играл в эту игру.

Вот так:

echo -n $(stat -c "file://%n%i" /media/home/file.mkv) | md5sum
у меня совпадают хэши.

В коде-то явно видно, что имя файла + инод.

Но долго доходило, что QCryptographicHash::hash(some_qstring.toLocal8Bit(), QCryptographicHash::Md5).toHex(); это не одно и то же, что и echo some_qstring | md5sum и что надо откусывать перевод строки перед передачей в md5sum.

Toxo2 ★★★★
()
Ответ на: комментарий от Toxo2

Думал, что замена эскиза в $HOME/.cache/thumbnails/large решает ситуацию, но увы, после генерации нужного эскиза при открытии в dde-FM нужного каталога эскиз пересоздаётся заново средствами dde-FM, вопрос как изменить поведение этого файл-менеджера?
или стоит создать новый тред?

agafron
() автор топика
Последнее исправление: agafron (всего исправлений: 1)
Ответ на: комментарий от agafron

Думал, что замена эскиза в $HOME/.cache/thumbnails/large решает ситуацию

Виноват, не понял - какую именно «ситуацию»? Перечитал стартовое сообщение, ничего не увидел про «ситуацию».

Вы хотите их подменять своими что ли? С какой целью?

Имя файла это только полдела. Там внутри у того PNG еще должны быть правильные tEXtThumb::MTime и tEXtThumb::URL. По крайней мере MTime - точно, ибо:

const QImage image = ir.read();

    if (!image.isNull() && image.text(QT_STRINGIFY(Thumb::MTime)).toInt() != (int)info.lastModified().toTime_t()) {
        QFile::remove(thumbnail);

        emit thumbnailChanged(absoluteFilePath, QString());

        return QPixmap();
    }

Toxo2 ★★★★
()
Ответ на: комментарий от Toxo2

Виноват, не понял - какую именно «ситуацию»? Перечитал стартовое сообщение, ничего не увидел про «ситуацию».

ситуация начиналась отсюда, но активности в треде не было и я пытаюсь «ситуацию» разобрать по частям

agafron
() автор топика
Последнее исправление: agafron (всего исправлений: 2)
Ответ на: комментарий от agafron

Понятно.

Вообще-то забавная игра.

На моём тестовом файле:

  • thunar записывает MTime = 1623434142.000000
  • convert -thumbnail 256x256 (как в том bash-скрипте) записывает MTime = 1623434142
  • а dde на том же тестовом файле пишет в метаданные MTime = 1623434143

:D

Может потом ещё в неё поиграю ) Смотрите у себя, сравнивайте, ищите откуда dde лишнюю секунду берёт ) У меня пока нет вариантов )

Toxo2 ★★★★
()
Ответ на: комментарий от Toxo2

я проверил, если скопировать эскиз из $HOME/.cache/thumbnails/normal в $HOME/.cache/thumbnails/large и переименовать, то dde-FM ее принимает, только не могу понять куда в скрипт засунуть команду копирования, поковыряюсь на досуге, спасибо за подсказки.
ЗЫ подскажите, как посмотреть этот самый MTime?

agafron
() автор топика
Ответ на: комментарий от agafron

подскажите, как посмотреть этот самый MTime?

я так смотрел:

$ exiftool 111.png | grep "Thumb M Time"
Thumb M Time                    : 1623434142

$ exiftool 41e5228d770bf4eba91dc04c76f09b81.png | grep "Thumb M Time"
Thumb M Time                    : 1623434143

$ exiftool 4c95345e915ab78b3da5a05be9562f5a.png | grep "Thumb M Time"
Thumb M Time                    : 1623434142.000000
Ну, или просто exiftool

Toxo2 ★★★★
()
Ответ на: комментарий от Toxo2

ищите откуда dde лишнюю секунду берёт

Ох, жеж.. Похоже это не deepin (Рафик ни в чем не уиноват).. Это сам imdb-thumbnailer зачем-то секунды дёргает в дате модификации файла туда сюда.

case $second in
					[13579] )	second=$((second-1)) ;;
					* )		second=$((second+1)) ;;
				esac

				incomplete_time=${file_time:0:18}

				new_cover_name=$incomplete_time$second-$file_size

				if [[ -f $cover_path/$cover_name.png ]]; then
					mv "$cover_path/$cover_name.png" "$cover_path/$new_cover_name.png"
				fi

				touch "$file_path" -d "$incomplete_time$second"
Не могу понять зачем. Но уже немного страшно )

Какой-то очень странный скрипт, который САМ может менять дату-время создания МОИХ файлов с какого-то рожна.

А потом ещё всем интернетам рассказывает какие у меня видео. А у меня тут всего-то пара роликов и их точно не может быть на imdb )

Ну его к лешему )

Toxo2 ★★★★
()
Ответ на: комментарий от Toxo2

А потом ещё всем интернетам рассказывает какие у меня видео.

это в какой строке он рассказывает интернетам?

САМ может менять дату-время создания МОИХ файлов с какого-то рожна

он же вроде время эскизов выставляет(я если честно этот отрывок кода сам не понимаю, но оно почему-то работает), а не время создания файла видео

Ну его к лешему )

Ну, чтож, буду ковыряться дальше, и на том спасибо, сдвиг и так уже есть)

agafron
() автор топика