Ciągłe ponawianie próby wznowienia pobierania z zawijaniem

17

Jestem na komputerze Mac i mam listę plików, które chciałbym pobrać z serwera ftp. Połączenie jest trochę wadliwe, więc chcę, aby spróbowało ponownie je wznowić, jeśli połączenie zostanie zerwane.

Wiem, że mogę to zrobić za pomocą wget, ale niestety Mac OS X nie jest wyposażony w wget. Mógłbym to zainstalować, ale aby to zrobić (chyba że coś przeoczyłem) muszę najpierw zainstalować XCode i MacPorts, czego chciałbym uniknąć.

Wydaje się, że Curl jest dostępny, ale nie wiem, jak to działa ani jak go naprawdę używać. Jeśli mam listę plików w pliku tekstowym (jedna pełna ścieżka na wiersz, na przykład ftp: // użytkownik: pass @ server / dir / file1 ), jak mogę użyć curl, aby pobrać wszystkie te pliki? Czy mogę się curl, aby nigdy się nie poddawać? Czy próbujesz w nieskończoność i wznawiać pobieranie tam, gdzie zostało przerwane?

Svish
źródło

Odpowiedzi:

20

Po googlowaniu i czytaniu przez człowieka i przez jakiś czas wymyśliłem rozwiązanie, które działało dla mnie:

curl ftp://server/dir/file[01-30].ext --user user:pass -O --retry 999 --retry-max-time 0 -C -
  • [01-30] sprawi, że pobierze 30 plików o nazwie file01.ext, file02.ext i tak dalej
  • --user user:pass powinno być oczywiste
  • -O do wyjścia do plików o oryginalnej nazwie
  • --retry 999 spróbować ponownie 999 razy
  • --retry-max-time 0aby zapobiec przekroczeniu limitu czasu ponownej próby. Domyślnym zachowaniem, jeśli nie zostanie określone stałe opóźnienie - jest uśpienie pierwszej sekundy między kolejnymi próbami, a następnie podwojenie tego, aż osiągnie 10 minut. między próbami
  • -C -aby kontynuował od miejsca, w którym spadł (jeśli ponownie uruchomisz polecenie). Myślnik następnie mówi, aby dowiedzieć się, skąd wznowić

Jeśli ktoś wie, jak uzyskać nazwy plików z pliku, daj mi znać.


Na stronie podręcznika jest napisane:

--url <URL>
Podaj adres URL do pobrania. Ta opcja jest szczególnie przydatna, gdy chcesz podać adresy URL w pliku konfiguracyjnym.

Wygląda na to, że to może być coś, ale nie do końca rozumiem, jak by to było wykorzystane ...

Svish
źródło
2

Możesz użyć opcji -K do zwijania się, aby określić plik konfiguracyjny. W takim przypadku używasz składni:

optionname=<value>

Jeśli masz plik zawierający listę adresów URL, możesz użyć curl w następujący sposób:

sed 's/\(.*\)/-O\nurl=\1/g' url_list.txt | curl -K -

który przekształca listę adresów URL, takich jak:

http://host1.com/foo.html
http://host2.com/bar.html

do formatu takiego jak ten:

-O
url=http://host1.com/foo.html
-O
url=http://host2.com/bar.html

Curl czyta to i interpretuje każdą z tych opcji.

HTH,

Adam

ahawtho
źródło