Jak wget przekierować plik o prawidłowej nazwie?

117

Więc po pewnym czasie wyszukiwania w Google i Super User (i skanowaniu stron podręcznika) nie mogłem znaleźć odpowiedzi na coś, co (moim zdaniem) powinno być proste:

Jeśli pójdziesz tutaj:

http://www.vim.org/scripts/script.php?script_id=2340

I spróbuj pobrać motyw:

http://www.vim.org/scripts/download_script.php?src_id=9750

Tak jak:

wget http://www.vim.org/scripts/download_script.php?src_id=9750

Prawdopodobnie skończy się na pliku o nazwie download_script.php?src_id=9750.

Ale chcę, żeby to się nazywało molokai.vim, co by się stało, gdybym użył przeglądarki do pobrania tego pliku.

Jakie opcje muszę określić dla wget dla pożądanego efektu?

Byłbym również w porządku z poleceniem równoważnym Curl.

audio.zoom
źródło

Odpowiedzi:

162
-O file
--output-document=file

Dokumenty nie zostaną zapisane w odpowiednich plikach, ale wszystkie zostaną połączone i zapisane w pliku. Jeśli -zostanie użyty jako plik, dokumenty zostaną wydrukowane na standardowe wyjście, co uniemożliwi konwersję łącza. (Służy ./-do drukowania do pliku o nazwie dosłownie -.)

Więc,

wget -O somefile.extension http://www.vim.org/scripts/download_script.php?src_id=9750

Możesz też być w stanie wgetto rozwiązać za pomocą opcji --content-disposition, jeśli jest obsługiwana przez twoją wersję.

wget --content-disposition http://www.vim.org/scripts/download_script.php?src_id=9750

Ostrzeżenia na stronie podręcznika,

--content-disposition

Jeśli ta opcja jest włączona, eksperymentalna (nie w pełni funkcjonalna) obsługa nagłówków „Content-Disposition” jest włączona. Może to obecnie skutkować dodatkowymi podróżami w obie strony do serwera z prośbą „HEAD” i wiadomo, że ma kilka błędów, dlatego obecnie nie jest domyślnie włączony.

Ta opcja jest przydatna w przypadku niektórych programów CGI pobierających pliki, które używają nagłówków „Content-Disposition” do opisania nazwy pobieranego pliku.

Możesz osiągnąć to samo zautomatyzowane zachowanie curl, używając,

curl -JLO http://www.vim.org/scripts/download_script.php?src_id=9750

-Oużywa nazwy zdalnej i -Jwymusza -Opobranie tej nazwy z nagłówka dyspozycji treści zamiast z adresu URL i w -Lrazie potrzeby następuje przekierowanie.

EightBitTony
źródło
2
Powinienem był określić, że to musi być automatyczne
audio.zoom
Jak rozumiem, wget polega na stronie internetowej, aby poprawnie informować, jeśli adres URL wskazuje na plik i należy go zapisać z czymś innym, używając nagłówka dyspozycji treści, który wget może, ale nie musi w pełni obsługiwać. Więc nie możesz tego zrobić automatycznie za pomocą wget. Zwijanie może być mniej lub bardziej skuteczne w zależności od strony internetowej.
EightBitTony
chodzi o to, aby móc pisać te rzeczy bez skomplikowanego parsowania, curl jest w porządku, ale jak dotąd nie byłem w stanie zebrać przyzwoitych opcji
audio.zoom
2
Aha - mylę się, zobacz zaktualizowaną odpowiedź. Właśnie dlatego strony stackexchange działają dobrze - każdy czegoś się uczy, nawet ludzie odpowiadający na pytania!
EightBitTony
1
To działało dla mnie w przypadku podcastu stackexchange, który od dłuższego czasu mnie denerwował. Dzięki.
Richard Campbell
75

Z wget możesz to zrobić:

wget --trust-server-names <url> 

aby zapisać plik przy użyciu ostatniej nazwy pliku podanej przez serwer.

Thi Duong Nguyen
źródło
2
Zastanawiam się, jaka jest różnica między --trust-server-namesi--content-disposition
JamesTheAwesomeDude
3
Wygląda na to, że --trust-server-namesnastępuje przekierowanie do innego pliku i --content-dispositionnazwa pliku o nazwie określonej w nagłówku odpowiedzi bez konieczności przekierowywania.
Asfand Qazi
1
Dlaczego nie jest to domyślna funkcjonalność?!?!
hopeseekr
8
@hopeseekr Serwer może być niegrzeczny i wywołać plik .bashrc, jeśli nie oglądasz uważnie. lists.gnu.org/archive/html/bug-wget/2012-04/msg00059.html
Patrick Conheady
3

Możesz także użyć aria2c - wydaje się, że dobrze współpracuje z nagłówkami Content-Disposition.

dkam
źródło