Muszę pobrać plik za pomocą wget, ale nie wiem dokładnie, jaka będzie nazwa tego pliku.
https://foo/bar.1234.tar.gz
Według strony man , wget pozwala włączyć i wyłączyć globbing gdy ma do czynienia z serwera ftp, jednak mam URL http.
Jak mogę użyć symbolu wieloznacznego podczas używania wget? Używam wget GNU.
Rzeczy, których próbowałem.
/usr/local/bin/wget -r "https://foo/bar.*.tar.gz" -P /tmp
Aktualizacja
Użycie -A powoduje pobranie wszystkich plików z rozszerzeniem .tar.gz na serwerze.
/usr/local/bin/wget -r "https://foo/" -P /tmp -A "bar.*.tar.gz"
Aktualizacja
Z odpowiedzi wynika, że jest to składnia, która ostatecznie zadziałała.
/usr/local/bin/wget -r -l1 -np "https://foo" -P /tmp -A "bar*.tar.gz"
curl "http://example.com/picture[1-10].jpg" -o "picture#1.jpg"
-e robots=off
-nH
i przydałem się--cut-dirs=<number>
takżeOdpowiedzi:
Myślę, że te przełączniki będą robić, co chcesz
wget
:Przykład
źródło
Jest dobry powód, dla którego nie może to działać bezpośrednio z HTTP, i dlatego, że URL nie jest ścieżką do pliku, chociaż użycie
/
jako separatora może sprawić, że będzie wyglądać jak jeden, i czasami się zgadzają. 1Tradycyjnie (lub historycznie) serwery sieciowe często wykonują lustrzane hierarchie katalogów (dla niektórych - np. Apache - jest to rodzaj integralności), a nawet zapewniają indeksy katalogów podobne do systemu plików. Nic jednak nie wymaga tego w protokole HTTP.
Jest to istotne, ponieważ jeśli chcesz zastosować glob na powiedzmy, wszystko co jest podścieżkę z
http://foo/bar/
, chyba że serwer zapewnia pewien mechanizm, aby zapewnić Państwu taki (np wspomnianego indeksu), nie ma nic, aby zastosować go do glob do . Nie ma tam systemu plików do przeszukiwania. Na przykład tylko dlatego, że wiesz, że istnieją stronyhttp://foo/bar/one.html
ihttp://foo/bar/two.html
nie oznacza to, że możesz uzyskać listę plików i podkatalogów za pośrednictwemhttp://foo/bar/
. Byłoby całkowicie w ramach protokołu, aby serwer zwrócił za to 404. Lub może zwrócić listę plików. Lub może wysłać ci ładne zdjęcie jpg. Itp.Więc nie ma tutaj standardu, który
wget
mógłby wykorzystać. AFAICT, wget działa w celu odzwierciedlenia hierarchii ścieżek poprzez aktywne sprawdzanie linków na każdej stronie . Innymi słowy, jeśli rekurencyjnie dublujesz,http://foo/bar/index.html
pobiera,index.html
a następnie wyodrębnia linki, które są jego podścieżką. 2-A
przełącznik jest jedynie filtrem, który jest stosowany w tym procesie.Krótko mówiąc, jeśli wiesz, że te pliki są gdzieś indeksowane, możesz zacząć od tego za pomocą
-A
. Jeśli nie, to nie masz szczęścia.1. Oczywiście adres URL FTP również jest adresem URL. Jednak chociaż nie wiem dużo o protokole FTP, sądzę, że w oparciu o jego naturę może on mieć formę, która pozwala na transparentne globowanie.
2. Oznacza to, że może istnieć prawidłowy adres URL
http://foo/bar/alt/whatever/stuff/
, który nie zostanie dołączony, ponieważ nie jest w żaden sposób powiązany z niczym w zbiorze rzeczy, z którymi jest powiązanyhttp://foo/bar/index.html
. W przeciwieństwie do systemów plików, serwery sieciowe nie są zobowiązane do zapewnienia przejrzystości układu treści, ani nie muszą tego robić w sposób intuicyjny.źródło
Powyższe rozwiązanie „-Wzór” może nie działać na niektórych stronach internetowych. Oto moje obejście z podwójnym wgetem:
wget
Stronagrep
na wzórwget
pliki)Przykład: załóżmy, że jest to strona z wiadomościami i chcę 5 plików mp3 od góry strony:
grep
Szuka powiązań podwójnie cytowany No-kosmicznych, które zawierają://
i mojej nazwy plikupattern
.źródło
bash
strona man. RANDOM Za każdym razem, gdy odwołuje się do tego parametru, generowana jest losowa liczba całkowita od 0 do 32767.