У меня следующая проблема: у меня есть локальный файл .zip и файл .zip, расположенные на сервере. Мне нужно проверить, отличается ли файл .zip на сервере от локального; если нет, мне нужно вытащить новый с сервера. Мой вопрос: как мне сравнить их, не загружая файл с сервера и сравнивая их локально?

Я мог бы создать хеш MD5 для zip-файла на сервере при создании файла .zip, а затем сравнить его с MD5 моего локального .zip файла, но есть ли более простой способ?

2
John Retallack 6 Авг 2010 в 15:58

3 ответа

Лучший ответ

Краткий ответ: нельзя.

Длинный ответ: для сравнения с zip-файлом на сервере кто-то должен прочитать этот файл. Либо вы можете сделать это локально, что потребует его извлечения, либо вы можете попросить сервер сделать это за вас. Можете ли вы запустить код на сервере?

Редактировать

Если вы можете запустить Python на сервере, почему бы не хэшировать файл и сравнивать хэши?

import hashlib
with open( <path-to-file>, "rb" ) as theFile:
    m = hashlib.md5( )
    for line in theFile:
        m.update( line )
with open( <path-to-hashfile>, "wb" ) as theFile:
    theFile.write( m.digest( ) )

А затем сравнить содержимое hashfile с локально сгенерированным хешем?

Другое редактирование

Вы просили более простой способ. Подумайте об этом абстрактно на мгновение:

  • Вы не хотите загружать весь почтовый файл.
  • Следовательно, вы не можете обработать весь файл локально (потому что это потребует чтения всего этого с сервера, что эквивалентно загрузке его!).
  • Следовательно, вам нужно выполнить некоторую обработку на сервере. В частности, вы хотите получить небольшой объем данных, который «кодирует» файл, так что вы можете извлечь этот небольшой объем данных без извлечения всего файла.
  • Но это хеш!

Следовательно, вам нужно выполнить какое-то хеширование. Учитывая это, я думаю, что вышесказанное довольно просто.

1
Katriel 6 Авг 2010 в 12:45

Я хотел бы знать, как вы собираетесь сравнивать их локально, если бы это было так. Вы можете применить ту же логику, чтобы сравнить их удаленно.

0
Rahul 6 Авг 2010 в 12:04

Вы можете войти с помощью ssh и сделать хеш md5 для файла удаленно и хеш md5 для текущего локального файла. Если md5 совпадают, файлы идентичны, иначе они разные.

0
Teodor Pripoae 6 Авг 2010 в 12:08