2013-09-22 13 views
5

Próbuję użyć wget pobrać plik pod inną nazwą lokalnego i pobierać tylko wtedy, gdy plik na serwerze jest nowsza.wget :: zmieniać nazwy pobranych plików, a jedynie pobranie nowszych

Co Myślałem, że mogę zrobić, to skorzystać z opcji wget-O tak aby móc wybrać nazwę pobranego pliku, na przykład:

wget http://example.com/weird-name -O local-name 

i połączyć to z opcją -N to nie pobiera niczego, chyba że znacznik czasu jest nowszy na serwerze. Z powodów wyjaśnionych w komentarzach poniżej, wget odmawia połączyć obie flagi:

WARNING: timestamping does nothing in combination with -O. See the manual 
for details. 

jakieś pomysły na zwięzłych obejść?

+1

Jaki jest twój cel? man wget wyjaśnia, dlaczego nie ma sensu mieszać -N z -O, ponieważ: -O nie ma oznaczać po prostu "użyj pliku nazwy zamiast tego w URL;" jest raczej analogiczny do przekierowania powłoki. W skrócie, twój plik wyjściowy zawsze będzie nowszy niż na serwerze i nic nie będzie nigdy ściągnięte. –

+1

Przypuszczam, że rzeczywiste pytanie brzmi "jaki jest idiomatyczny sposób wget/bash, aby zmienić nazwę pobranych plików ** i ** tylko pobrać je, jeśli są nowsze na serwerze" - przeformułowałem pytanie, aby to wyjaśnić. –

+0

@ecelis jeśli dostaję ciebie i co 'man wget' mówi poprawnie, oznacza to, że plik' -O' jest zawsze zapisywany/skracany od razu po uruchomieniu 'wget', więc jego znacznik czasu jest zawsze TERAZ, w którym to przypadku pobieranie nigdy nie jest uruchamiane. Dobrze? –

Odpowiedz

2

go pobrać, a następnie utworzyć łącze

wget -N example.com/weird-name 
ln weird-name local-name 

Po tym można uruchomić wget -N i będzie działać zgodnie z oczekiwaniami:

  • pobierać tylko jeśli nowsze
  • Jeśli nowy plik zostanie pobrany będzie dostępny pod dowolną nazwą, bez kosztu dodatkowego
+0

Może to działać, chyba że powodem, dla którego używałeś '-O', było to, że pobierasz plik tego samego z kilku źródeł do tego samego katalogu. Na przykład, jeśli pobierasz kilka plików robots.txt. –

1

W przypadku korzystania z innego narzędzia jest możliwe w przypadku, polecam darmowy, open source lwp-mirror:

lwp-mirror [-options] <url> <file> 

działa tak, jak chcesz, bez obejścia.

To polecenie jest dostarczane między innymi w pakiecie libwww-perl na Ubuntu i Debian.

Należy pamiętać, że lwp-mirror nie obsługuje wszystkich innych funkcji wget. Na przykład nie pozwala ustawić agenta użytkownika dla żądania, takiego jak wget.

Powiązane problemy