Jak zezwolić wgetowi na zastępowanie plików

9

Za pomocą wgetpolecenia, jak mogę / polecam nadpisywać mój plik lokalny za każdym razem, niezależnie od tego, ile razy wywołuję.

Powiedzmy, że chcę pobrać plik z lokalizacji: http: //server/folder/file1.html

Tutaj, ilekroć mówię wget http://server/folder/file1.html, chcę, file1.htmlaby zostało to nadpisane w moim systemie lokalnym, niezależnie od czasu, kiedy jest zmieniane, już pobrane itp. Moim celem / przypadkiem użycia jest to, że kiedy wywołuję wget, jestem bardzo pewien, że chcę aby zastąpić / zastąpić istniejący plik.

Wypróbowałem następujące opcje, ale każda z nich jest przeznaczona / przeznaczona do innego celu.

  1. -nc => --no-clobber
  2. -N => Włącz znaczniki czasu
  3. -r => Włącz pobieranie rekurencyjne
Gnanam
źródło

Odpowiedzi:

7
wget -q http://www.whatever.com/filename.txt -O /path/filename.txt 

-q jest trybem cichym, więc możesz wrzucić go do crona bez żadnych danych wyjściowych polecenia

Aleroot
źródło
Nie ma bezpośredniej opcji w wgetpoleceniu, która by to zrobiła bez mojego wyraźnego użycia -O filename?
Gnanam,
3
Wydaje się, że nie ma możliwości wymuszenia zastąpienia wszystkich plików podczas pobierania plików za pomocą wget. Jednak użycie opcji -N może z pewnością wymusić pobieranie i zastępowanie nowszych plików. wget -N
Zastąpi
Nie prawda. skieruj wyjście polecenia do standardowego wyjścia i potokuj go do pliku: wget -q $ urlYouNeedToGrap> $ fileYouWantToOverwriteEverytime
rasjani
8

Ta opcja działa

wget -N http://server/folder/file1.html

informacje

-N,  --timestamping            don't re-retrieve files unless newer than
                               local.
Steven Penny
źródło
4

Użyć curlzamiast tego?

curl http://server/folder/file1.html > file1.html
Stu Thompson
źródło
Nie jestem ekspertem od Linuksa. Jaka jest podstawowa różnica między wgeti curl? Jestem pewien, że każde polecenie jest przeznaczone do określonego celu.
Gnanam,
1
@Gnanam: Właściwie pokrywają się one w podstawowym narzędziu CLI. Oba mogą nawiązać połączenie HTTP i zapisać wynik na dysku. Aby zapoznać się z różnicami, zobacz daniel.haxx.se/docs/curl-vs-wget.html Niezależnie od powyższego powyższe użycie jest całkowicie poprawne. Istnieją również inne narzędzia w tym obszarze ogólnym: curl.haxx.se/docs/comparison-table.html
Stu Thompson
Te 2 linki są naprawdę pomocne w zrozumieniu różnicy.
Gnanam
0

Nie sądzę, że możesz to zrobić, chyba że ściągniesz również katalogi (więc przekaż flagę -x). Jeśli wiesz, co to jest plik, możesz użyć -O nazwa pliku, więc na przykład:
wget http://yourdomain.com/index.html -O index.html

James L.
źródło
0

Untried: może będziesz w stanie pracować wget -r --level=0.

Inna możliwość: curl -Ozastępuje (ale używa innego sposobu wyboru nazwy pliku, co może, ale nie musi mieć znaczenia).

Gilles „SO- przestań być zły”
źródło
Ta wgetlinia naprawdę nie robi właściwej rzeczy, ponieważ tworzy hierarchię podkatalogów. curl -Oz drugiej strony poprawnie pobiera plik, zastępując istniejące kopie.
coś
0

Dlaczego nie umieścić małego skryptu wokół wget w swoim skrypcie?

Skrypt może przenieść wszystkie pliki do tymczasowej lokalizacji, a następnie wget zdalne pliki / strony internetowe.

Po sukcesie usuń pliki w tymczasowej lokalizacji. W przypadku awarii przenieś pliki z powrotem i zgłoszenie błędu.

Nie ma prostego sposobu na zrobienie tego, co chcesz, za pomocą tylko wget, chyba że znasz konkretną nazwę wszystkich plików, w którym to przypadku opcja -O pozwoli ci wymusić nazwę pobranego pliku.

Richard Holloway
źródło