web-dev-qa-db-ja.com

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

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

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

man page によると、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"
61
spuder

これらのスイッチは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/
69
slm

上記の「-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を含む、二重引用符で囲まれたスペースなしのリンクを探しています。

1
nightshift

オプション-ndを使用して、ディレクトリの階層なしですべてのファイルを現在のディレクトリに保存します。例:

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