Szukam polecenia powłoki, które zapewnia, że plik zostanie całkowicie pobrany, ale unika się niepotrzebnego ponownego pobierania. Oto pseudokod tego, na co liczę:
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
jest w stanie wznowić przerwane przelewy za pomocą -c
opcja, ale muszę śledzić gdzieś, że została przerwana, abym mógł wiedzieć, że przekazać tę opcję i wymaga ponownego uruchomienia polecenia.
wget -N
upewnia się, że unikniesz pobierania pliku, jeśli znacznik czasu zdalnego pliku nie jest nowszy niż lokalny. Ale nie wie, czy transfery zostały przerwane, a tym samym nic nie zrobi, gdy zadzwoni ponownie przy przerwanym transferze.
curl -C -
pobierze plik, jeśli nie będzie obecny, i wznowi go, jeśli zostanie tylko częściowo pobrany. Ale jeśli obecny jest całkowicie pobrany plik, daje mi błędy dotyczące tego, że serwer nie obsługuje zakresów bajtów.
Przypuszczam, że sam mógłbym napisać coś, aby zaimplementować mój pseudokod, ale wydaje mi się, że byłoby to dość powszechne pragnienie, o które proszę, czy istnieje jakiś sposób na to?