Вече си получил добри идеи. Само да вметна, че ftp сървърите знаят дали изтегленият файл е изтеглен нацяло или не, и записват това в лога, ако е позволено да водят логове за това (xferlog). Когато даден файл бъде изтеглен нацяло без грешки, в xferlog-а се записва ред за този файл, който ред завършва с буквата "c". Тази буква "c" означава completion-status и указва, че файлът е бил изтеглен нацяло 
Едно е изтеглен изцяло, друго е записан изцяло и без промени, нали?
Това е много добра идея. Реализацията с мд5 сумите страда от race conditions, които са много малко вероятни, ма знае ли човек. Примерно какво се случва, ако уиндоуския клиент лист-не директорията в момента в който скрипта записва файла, но не е записал файла с чексумата...прави локално digest и няма с какво да го сравни, при това положение не е много ясно какво правим, особено ако уиндоуският клиент е направен така че да трие файловете отсреща след като ги е издърпал. Но това с интегритета на архива гарантира някаква атомарност, в смисъл не може да се случат такива изцепки.
Да, да... защо ли имам спомени че zip ползва crc32, та колизиите ще са доста повече сравнено с md5
И доколкото разбирам файла се създава в линукс, но не се тегли веднага, т.е. има време външна програма да драсне един файл със чексумите. Освен това времето за създаване на чексум е доста по-малко (в огромния процент случаи) от времето за създаване на файла. Така че вероятността да се попадне в ситуацията, която описваш е много малка