Pomiń pobieranie, jeśli pliki istnieją w wget?


Odpowiedzi:


270

Wypróbuj następujący parametr:

-nc, --no-clobber: pomiń pobieranie, które pobierałoby do istniejących plików.

Przykładowe użycie:

wget -nc http://example.com/pic.png

35
-ncnie uniemożliwia wysłania żądania HTTP i późniejszego pobrania pliku. Po prostu nie robi nic po pobraniu pliku, jeśli plik został już w pełni pobrany. Czy istnieje sposób, aby zapobiec wysyłaniu żądania HTTP, jeśli plik już istnieje? stackoverflow.com/questions/33203898/...
ma11hew28,

8
Jak zauważono w połączonym pytaniu, nie zgadzam się - jeśli nie zostanie użyty żaden clobber, a nazwa pliku istnieje, zostanie zamknięty. Nawet nie ma żądania HEAD. Nawet jeśli tak nie było, sprawdź, czy masz plik na początek :-)[ ! -e "$(basename $URL)" ] && wget $URL
plundra

3
Myślę, że mogę uzyskiwać różne wyniki, ponieważ korzystam z tej --recursiveopcji.
ma11hew28,

198

-nc, --no-clobberOpcja ta nie jest najlepszym rozwiązaniem, ponieważ nowe pliki nie zostaną pobrane. -NZamiast tego należy użyć, który pobierze i nadpisze plik tylko wtedy, gdy serwer ma nowszą wersję, więc poprawna odpowiedź to:

wget -N http://www.example.com/images/misc/pic.png

Następnie uruchomienie Wget z opcją -N, z lub bez -rlub -p, decyzja o tym, czy pobrać nowszą kopię pliku, zależy od lokalnego i zdalnego znacznika czasu i wielkości pliku. -ncnie można podać w tym samym czasie co -N.

-N, --timestamping: Włącz oznaczanie czasu.


39
Gdy serwer nie jest poprawnie skonfigurowany, -Nmoże się nie powieść, a wget zawsze pobierze ponownie. Więc czasami -ncjest lepsze rozwiązanie.
użytkownik

2
jaki mógłby być odpowiedni scenariusz, w którym wystąpiłby komunikat „Gdy serwer nie jest poprawnie skonfigurowany”?
AjayKumarBasuthkar

podczas pobierania z miejsca, które zostało skopiowane, zmieniając wszystkie znaczniki czasu.
Robert

To, czy jest to najlepsze, zależy od kontekstu. Na przykład pobieram ~ 1600 plików z listy, a następnie aktualizuję listę, aby zawierała więcej plików. Pliki się nie zmieniają, więc nie dbam o najnowszą wersję i nie chcę, aby sprawdzała serwer pod kątem nowych wersji 1600 plików, które już mam.
JBentley,

2
@AjayKumarBasuthkar: Gdy serwer nie obsługuje żadnego sposobu sprawdzania nowszego pliku, wgetbędzie narzekał Last-modified header missing; jest to dokładnie nakreślona sytuacja.
Piskvor opuścił budynek

23

Podczas uruchamiania Wget z -rlub -p, ale bez -N, -ndlub -nc, ponowne pobranie pliku spowoduje, że nowa kopia po prostu nadpisze stary.

Tak więc dodanie -nczapobiegnie takiemu zachowaniu, zamiast tego spowoduje zachowanie oryginalnej wersji i zignorowanie wszelkich nowszych kopii na serwerze.

Zobacz więcej informacji na GNU.


18

Odpowiedź, której szukałem, to https://unix.stackexchange.com/a/9557/114862 .

Użycie -cflagi, gdy plik lokalny ma większy lub równy rozmiar od wersji serwera, pozwoli uniknąć ponownego pobierania.


1
Jest to szczególnie świetne, gdy pobierasz kilka plików z flagą -i. wget -i filelist.txt -cwznowi nieudane pobieranie listy plików.
Trevor,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.