Як мати однаковий хеш із папки на Windows та Linux?


0

Я використовував 7zip для обчислення хеша папки (з вкладеними папками), що може робити з двома параметрами, з включенням імен файлів або без них.

Однак у Linux-версії 7zip хеш-функція не реалізована. Я намагався різними методами дублювати результат, але жоден із цих методів не дав би однакового результату для Linux та Windows.

Приклади результатів:

" 7za.exe h -scrcsha1 myfolder" на windows дає:

SHA1   for data:              D54D3168B16BFEE600C3A77E848A2A1C1DBCBC59
SHA1   for data and names:    BCE55085200581AD1774CC25AE065DE7DE60077D

, тоді як у Linux я:

find . -type f -exec sha1sum "$PWD"/{} \; | sha1sum
ee44137f2462bdfea87ec824dab514f288ae3e6c  -

або

find . -type f | xargs sha1sum | sha1sum
8f971311a28bcdee36fab0ce87a892564622db40  -

Тому я не можу використовувати результат з однієї платформи на іншій.

(Я перевірив, що результат для одного файлу однаковий для обох платформ.)


Чи робиться хеш кожного файлу, а потім є хешування цього параметра?
davidbaumann

2
Що не спрацювало з прийнятою вами відповіддю? find . -type f -exec sha1sum "$PWD"/{} \; | sha1sum- чи можете ви сказати нам проблеми?
Attie

Відповіді:


1

Просто виконання наступної команди не обов'язково спрацює:

find . -type f | xargs sha512sum | sha512sum

Проблема, з якою ви можете зіткнутися, полягає в тому, що порядок файлів, про які повідомляють, findвідрізняється від системи до системи або навіть від копії каталогів до копіювання.

Замість цього спробуйте виконати наступне:

find . -type f | sort | xargs sha512sum | sha512sum

Не соромтеся помінятися sha512sumна інше - наприклад: md5sum/ sha1sum/ sha256sumзалежно від ваших вимог.

Зауважте, що для великих дерев каталогів це може повільно, і в цьому випадку ви можете віддати перевагу більш складному сценарію для переходу до ієрархії.


Приклад:

$ find . -type f | xargs sha512sum | sha512sum
097e56f6b751c1da15ce5b9dce853ffcc89e06e9cbe10a8dc0894dedb834d40dc4228c65e48bd53f136dd6a7700b0ab07e8e12e7100956db00b0d1b9ef0b9956  -

Сюди входять імена файлів та вміст у остаточному хеші, але не включають метадані - час модифікації, дозволи та ін.


Зауважте, що ви можете використовувати ці утиліти в Windows, використовуючи " Підсистему Windows для Linux ". Я щойно встановив його, що було безболісним досвідом, і який також змусив мене зрозуміти проблему із findповідомленням про замовлення.

Також слідкуйте за тим, як символічні посилання обробляються на вашому дереві в Linux проти Windows.


Дякую, але як я можу прийти до того ж хеш-значення на Windows?
Нігаель

Чи можете ви відредагувати своє запитання з результатами find . -type f | xargs sha512sumкожної системи - спробуйте невеликий приклад каталогу. Цікаво, чи викликають зворотні косої риски проблеми ... Або якщо ваші каталоги насправді інші.
Attie

О, я щойно перечитав ваше запитання ... у вас налаштування " Підсистеми Windows для Linux " ? Ви повинні мати змогу запускати одну і ту ж команду в обох системах.
Attie

У мене цього не встановлено, але це здається трохи надмірним для мого випадку, я шукаю автономний exe чи подібний. (Я в кінцевому підсумку хочу використовувати рішення з командного рядка nodejs exec на будь-якому комп’ютері після лише nsis встановлення моєї програми + залежності)
Nygael

Ну якщо ви використовуєте NodeJS, то це вже інше питання ... Ви не шукаєте набір утиліт для досягнення мети, вас цікавить, як реалізувати потрібні функції.
Attie
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.