http yüklemelerinde joker karakterlerle wget


53

Wget kullanarak bir dosya indirmem gerekiyor, ancak tam olarak dosya adının ne olacağını bilmiyorum.

https://foo/bar.1234.tar.gz

Göre adam sayfasında , wget sen ancak bir http url var, kapatıp bir ftp sitesi ile uğraşırken globbing üzerine sağlar.

Bir wget kullanırken joker karakterini nasıl kullanabilirim? Gnu Wget kullanıyorum.

Denediğim şeyler.

/usr/local/bin/wget -r "https://foo/bar.*.tar.gz" -P /tmp

Güncelleme

-A'nın kullanılması, sunucuda .tar.gz ile biten tüm dosyaların indirilmesine neden olur.

/usr/local/bin/wget -r "https://foo/" -P /tmp -A "bar.*.tar.gz"

Güncelleme

Cevaplardan, bu sonuçta işe yarayan sözdizimidir.

/usr/local/bin/wget -r -l1 -np "https://foo" -P /tmp -A "bar*.tar.gz"

2
Bu tam olarak aradığın şey değil, ama bununla ilgili: Curl, temel joker karakterlerini kullanma yeteneğine sahip, örneğin:curl "http://example.com/picture[1-10].jpg" -o "picture#1.jpg"
Hello World

1
Benim için bir yakaladım oldu -e robots=offparametre değildir : Robots.txt itaat stackoverflow.com/a/11124664/1097104
Juuso Ohtonen

Bayrakları eklerken buldum -nHve --cut-dirs=<number>aynı zamanda yararlı oldu
Randall

Yanıtlar:


62

Bence bu anahtarlar istediğin şeyi yapacak wget:

   -A acclist --accept acclist
   -R rejlist --reject rejlist
       Specify comma-separated lists of file name suffixes or patterns to 
       accept or reject. Note that if any of the wildcard characters, *, ?,
       [ or ], appear in an element of acclist or rejlist, it will be 
       treated as a pattern, rather than a suffix.

   --accept-regex urlregex
   --reject-regex urlregex
       Specify a regular expression to accept or reject the complete URL.

Örnek

$ wget -r --no-parent -A 'bar.*.tar.gz' http://url/dir/

15

Orada bu HTTP ile doğrudan çalışamaz bu iyi bir neden var ve bu bir URL işte değil kullanımı her ne kadar bir dosya yolu /ayırıcı olarak o biri gibi görünmesi ve onlar karşılık bazen yapmak. 1

Geleneksel olarak (veya tarihsel olarak), web sunucuları genellikle dizin dizini hiyerarşilerini yansıtır (bazıları için - örneğin, Apache - bu bir tür integraldir) ve hatta bir dosya sistemi gibi dizin dizinleri sağlar. Ancak, HTTP protokolü hakkında hiçbir şey bu gerektirmez.

Eğer bir alt yol olan her şey, diyelim ki bir topak uygulamak istiyorsanız, çünkü bu, anlamlıdır http://foo/bar/sunucu böyle (örneğin yukarıda belirtilen indeksi) sağlamak için bazı mekanizma sağlar sürece, o topak uygulamak için hiçbir şey için . Aranacak dosya sistemi yok. Örneğin, bilirsin sırf sayfalar olup http://foo/bar/one.htmlve http://foo/bar/two.htmlsen aracılığı dosya ve alt dizin listesini almak anlamına gelmez http://foo/bar/. Sunucunun bunun için 404'ü geri göndermesi tamamen protokol içinde olacaktır. Veya bir dosya listesi verebilir. Veya size güzel bir jpg resmi yollayabilir. Vb.

Yani burada wgetyararlanabilecek bir standart yok . AFAICT, wget , her sayfadaki bağlantıları aktif olarak inceleyerek bir yol hiyerarşisini yansıtmak için çalışır . Başka bir deyişle, özyinelemeli olarak yansıtırsanız http://foo/bar/index.htmlindirir index.htmlve bunun alt yolunu olan bağlantıları çıkarır. 2-A anahtarı sadece bu işlemde uygulanan bir filtredir.

Kısacası, bu dosyaların bir yere endekslendiğini biliyorsanız, onu kullanarak başlayabilirsiniz -A. Eğer değilse, o zaman şansın tükenir.


1. Elbette bir FTP URL'si de bir URL'dir. Bununla birlikte, FTP protokolü hakkında fazla bir şey bilmemekle birlikte, saydam globbing için izin veren bir formda olabileceğine bağlı olarak tahmin ediyorum.

2. Bu geçerli bir URL var olabileceği anlamına gelir dahil edilmez o bağlantılı şeylerin kümesinde hiçbir ilgisi hiçbir şekilde olmadığı için . Dosya sistemlerinden farklı olarak, web sunucuları içeriklerinin düzenini saydamlaştırmak zorunda değildir ve sezgisel olarak açık bir şekilde yapmak zorunda da değildirler.http://foo/bar/alt/whatever/stuff/http://foo/bar/index.html


0

Yukarıdaki '-A kalıbı' çözümü bazı web sayfalarıyla çalışmayabilir. Bu benim çalışma ortamım, çift wget ile:

  1. wget sayfa
  2. grep desen için
  3. wget dosyalar)

Örnek: Diyelim ki bir haber podcast sayfası ve sayfanın en üstünde 5 mp3 dosyası istiyorum:

wget -nv -O- https://example/page/ |
 grep -o '[^"[:space:]]*://[^"[:space:]]*pattern[^"[:space:]]*\.mp3' |
  head -n5 | while read x; do
    sleep $(($RANDOM % 5 + 5))  ## to appear gentle and polite
    wget -nv "$x"
  done

Bu grep, çift tırnak içeren boşluk içermeyen bağlantıları ://ve dosya adımı arıyor pattern.


RANDOM burada ne?
Royki

Bir kabuk değişkeni, bashman sayfasına bakınız . RANDOM Bu parametreye her referansta, 0 ile 32767 arasında rastgele bir tam sayı üretilir.
nöbetinde
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.