Я ищу команду оболочки, которая надежно гарантирует, что файл полностью загружен, но избегает повторной загрузки чего-либо без необходимости. Вот псевдокод того, на что я надеюсь:
If file doesn't exist, download it.
If file exists:
use HTTP HEAD to get timestamp and size of remote file.
if remote timestamp is newer, delete local file and download remote file
if timestamps are the same:
if remote size is greater than local size:
resume download
if remote size is equal to local size:
do nothing
if remote size is less than local size:
do nothing but issue a warning because this is weird
wget
может возобновлять прерванные передачи, используя опцию -c
, но я должен где-то отследить, что он был прерван, чтобы я мог знать, как передать эту опцию, и он требует повторного запуска команды.
wget -N
позволяет избежать загрузки файла, если временная метка удаленного файла не новее локальной. Но он не знает, были ли переводы прерваны и, следовательно, ничего не будет делать при повторном вызове при прерванной передаче.
curl -C -
загрузит файл, если его нет, и возобновит его, если загрузит только частично. Но если полностью загруженный файл присутствует, он выдает мне ошибки о том, что сервер не поддерживает байтовые диапазоны.
Я полагаю, что мог бы написать что-то для реализации своего псевдокода самостоятельно, но мне кажется, что это было бы достаточно распространенным желанием, которое я спрашиваю, существует ли способ сделать это?