Muszę pobrać plik z serwera HTTP, ale tylko jeśli zmienił się od czasu ostatniego pobrania (np. Przez If-Modified-Since
nagłówek). Potrzebuję też użyć niestandardowej nazwy pliku na moim dysku.
Jakiego narzędzia mogę użyć do tego zadania w systemie Linux?
wget -N
nie można użyć, ponieważ -N
nie można go używać z -O
.
Odpowiedzi:
Rozważ użycie
curl
zamiastwget
:man curl
mówi:Jeśli
$file
niekoniecznie musi istnieć wcześniej, musisz uzależnić użycie-z
flagi, używająctest -e "$file"
:(Pamiętaj, że nie cytujemy
$zflag
tutaj rozszerzenia , ponieważ chcemy, aby zostało podzielone na 0 lub 2 tokeny).Jeśli twoja powłoka obsługuje tablice (np. Bash), mamy bezpieczniejszą i czystszą wersję:
źródło
Przełącznik wget
-N
pobiera plik tylko wtedy, gdy został zmieniony, więc możliwe byłoby użycie prostego-N
przełącznika, który pobierze plik, jeśli będzie to konieczne, ale pozostawi go z niewłaściwą nazwą. Następnie utwórz twardy link za pomocąln -P
polecenia, aby połączyć go z „plikiem” o poprawnej nazwie. Połączony plik ma te same metadane co oryginał.Jedynym ograniczeniem jest to, że nie można mieć twardych łączy między granicami systemu plików.
źródło
Skrypt Python 3.5+ do zawijania polecenia curl:
źródło
chain
:)Podobne podejście do „ sprawdzania daty ” (z „curl - time-cond”) polegałoby na pobraniu zgodnie z porównaniem wielkości pliku, tj. Pobraniu tylko wtedy, gdy plik lokalny ma inny rozmiar niż plik zdalny .
Jest to przydatne na przykład, gdy proces pobierania nie powiódł się w środku , a zatem lokalny pobrany plik otrzymuje nowszą datę niż plik zdalny, ale w rzeczywistości jest uszkodzony i konieczne jest ponowne pobranie:
Opcja „curl -z / --time-cond” (która została zasugerowana w innej odpowiedzi) nie spowoduje pobrania pliku zdalnego w tym przypadku (ponieważ plik lokalny ma nowszą datę), ale ten skrypt „ sprawdzania rozmiaru ” to zrobi!
źródło