httpダウンロードでワイルドカードを使用したwget


53

wgetを使用してファイルをダウンロードする必要がありますが、ファイル名が正確にはわかりません。

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

manページによると、wgetを使用すると、ftpサイトを扱うときにグロビングをオフまたはオンにすることができますが、http URLがあります。

wgetの使用中にワイルドカードを使用するにはどうすればよいですか?私はgnu wgetを使用しています。

私が試したもの。

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

更新

-Aを使用すると、サーバー上の.tar.gzで終わるすべてのファイルがダウンロードされます。

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

更新

答えから、これは最終的に機能した構文です。

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

2
これは、あなたが探しているが、それが関係しています正確に何ではありません:カールは、基本的なワイルドカードを使用する能力を持って、例えば:curl "http://example.com/picture[1-10].jpg" -o "picture#1.jpg"
Hello Worldの

1
私にとっての-e robots=off
落とし穴の

フラグ-nHを追加することもわかりまし--cut-dirs=<number>た。また便利でした
ランドール

回答:


62

これらのスイッチはあなたが望むことをするだろうと思います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.

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

15

これがHTTPで直接機能しないことには十分な理由があります。それ、URL ファイルパスではないということです。ただし、/区切り文字として使用すると、URLのように見えます。1

従来(または、歴史的に)、Webサーバーはしばしばディレクトリ階層をミラーリングし(たとえば、Apacheのように、これは一種の不可欠です)、ファイルシステムのようなディレクトリインデックスを提供します。ただし、HTTPプロトコルについてはこれを必要としません。

これは重要です。たとえば、サブパスであるすべてにグロブを適用するhttp://foo/bar/場合、サーバーがそのようなグロブ適用するメカニズム(前述のインデックスなど)を提供しない限り、グロブ適用するものは何もないためです。 検索するファイルシステムはありません。 たとえば、ページがあることを知っているからといって、を介してファイルとサブディレクトリのリストを取得できるわけではhttp://foo/bar/one.htmlありhttp://foo/bar/two.htmlませんhttp://foo/bar/。サーバーがそのために404を返すのは、完全にプロトコル内です。または、ファイルのリストを返すこともできます。または、素敵なjpg画像を送信できます。等。

このwgetため、悪用できる標準はありません。AFAICT、wget は、各ページのリンクを積極的に調べることにより、パス階層をミラーリングします。つまり、再帰的にミラーリングhttp://foo/bar/index.htmlするindex.htmlと、ダウンロードしてから、そのサブパスであるリンクを抽出します。2-Aスイッチは、単にこの方法で適用されるフィルタです。

つまり、これらのファイルのインデックスがどこかにあることがわかっている場合は、を使用して開始できます-A。そうでない場合、あなたは運が悪いです。


1.もちろん、FTP URLもURLです。ただし、FTPプロトコルについてはあまり知りませんが、その性質に基づいて、透過的なグロビングを可能にする形式である可能性があると思います。

有効なURLがあるかもしれません2.この手段は含まれません、それはにリンクされているもののセットで何にリンクされている任意の方法ではないために。ファイルシステムとは異なり、Webサーバーはコンテンツのレイアウトを透明にする義務はなく、直感的に明白な方法でレイアウトする必要もありません。http://foo/bar/alt/whatever/stuff/http://foo/bar/index.html


0

上記の「-Aパターン」ソリューションは、一部のWebページでは機能しない場合があります。これは私の二重のwgetの回避策です:

  1. wget ページ
  2. grep パターン用
  3. wget ファイル)

例:それがニュースポッドキャストページであり、ページの上部から5つのmp3ファイルが必要だとします。

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

grep二重引用符で囲まれた含まれていないスペースのリンクを探している://と私のファイル名pattern


ここでランダムとは何ですか?
ロイキ

シェル変数bash。manページを参照してください。RANDOMこのパラメーターが参照されるたびに、0〜32767のランダムな整数が生成されます。
夜勤
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.