Есть ли способ проверить целостность удаленного файла? В настоящее время я пересылаю большое количество файлов и папок с ftp-сервера на другой удаленный сервер с помощью wget, но у меня нет возможности узнать, повреждены ли файлы. Есть ли способ проверить целостность передачи, получив что-то вроде хэша MD5 удаленных файлов? Есть ли другой протокол передачи файлов, поддерживающий это?
rsync
почти всегда лучший ответ для передачи файлов. Он наиболее известен своей дифференциальной оптимизацией передач (отлично, когда у вас уже есть аналогичный файл или каталог), но он обильно проверяет контрольные суммы на каждом этапе передачи.
В зависимости от инструмента, который вы используете, можно автоматически хешировать и проверять загруженные файлы, единственный инструмент, который может сделать это, сразу приходит на ум, хотя это DownThemAll! аддон для Firefox.
То, что я обычно использую для подобных ситуаций, - файл хеш-манифеста, созданный md5deep в Windows вы можете использовать md5sum, если вы используете Linux / UNIX или md5 в OS X. Используя md5deep I CD, перейдите в папку, содержащую файлы для передачи, и выполните команду:
md5deep -l -r *>manifest.md5
На удаленном конце после передачи файлов и манифеста вы должны выполнить команду:
md5deep -l -r -x manifest.md5 *
И он покажет список каждого файла, который НЕ соответствует хэш-значению в манифесте.
Хотя мне очень нравятся ответы md5deep и rsync (и за них проголосовали оба), похоже, что вы сталкиваетесь с действительно сложной группой людей на исходном сервере. Альтернатива, которая действительно уродлива, но лучше, чем ничего, - это отсортировать журнал передачи для размеров файлов, а затем сравнить их локально.
wget -nv -o log.txt ftp://ftp.myserver.com/welcome.msg
... создал строку файла журнала, которая выглядит следующим образом:
2010-01-01 09:47:17 URL: ftp://ftp.myserver.com/welcome.msg [470] -> "welcome.msg" [1]
Итак, используя небольшой скрипт-фу с каким-нибудь awk или еще чем-то, вы можете вытащить имя файла и размер файла, а затем, по крайней мере, сравнить их соответствие. Я повторяю, что это некрасиво и должно стать вашим последним решением ... но оно работает.
Это долгий путь, но если сервер поддерживает php, вы можете воспользоваться этим.
Сохраните следующее как php
файл (скажем, check.php
) в той же папке, что и ваш name_of_file.txt
файл:
<? php
echo md5_file('name_of_file.txt');
php>
Затем перейдите на страницу check.php
, и вы должны получить хеш md5 вашего файла.
Связанные вопросы: