webdevqa.jp.net

wgetまたはcurlクエリでのワイルドカードの使用

ディレクトリからダウンロードするときにwgetクエリでワイルドカードを使用できますか?基本的に、私はサイトを持っています、たとえば、www.download.example.com/dir/version/package.rpm。ただし、バージョンディレクトリは常に変更され、複数のRPMパッケージが含まれることがあります。そのバージョンが何であるかを知らずに、私とversionディレクトリ内のすべてのパッケージのみを取得する単一のwgetクエリはありますか?私の理想的な世界では、クエリは次のようになります。

wget www.download.example.com/dir/*/*.rpm

curlでこれを行う方法があれば、それも同様に機能します。

23
mart1n

wgetではワイルドカードを使用できませんが、-Aフラグが機能するはずです。 wget manpage から:

Httpサーバー上のディレクトリからすべてのgifをダウンロードする必要があります。あなたがしようとした wget http://www.server.com/dir/*.gif、ただし、httpの取得ではグロビングがサポートされていないため、機能しませんでした。その場合、次を使用します:wget -r -l1 --no-parent -A.gif http://www.server.com/dir/

編集: 関連する質問 が見つかりました

ディレクトリについて:

LFTP と呼ばれるユーティリティがあります。これは、グロビングをサポートしています。 manpage を見てください。もう1つ LinuxとUnixの質問 があり、これはあなたと似たシナリオでの使用法をカバーしています。

29
user2062950

クエリでパターンを見つけることができる場合、bash brace拡張を使用してこのタスクを実行できます。

たとえば、あなたの場合、次のようなものを使用できます。

wget www.download.example.com/dir/{version,old}/package{00..99}.rpm

また、これを-Aおよび-Rパラメーターと組み合わせて、結果をフィルターに掛けることができます。

10
Ivan

上記のソリューションの種類は機能しますが、すべてではなく特定のディレクトリをダウンロードするだけでは失敗します。たとえば、次の場合:

http://site.io/like/
http://site.io/like2/
http://site.io/nolike/

代わりに、テキストファイルに目的のディレクトリ名を入力します。例:dirs.txt:

like/
like2/

次に、wgetを次のコマンドオプション-i dirs.txt -B <base-URL>とともに使用します。

wget -nH -nc -np -r -e robots=off -R "index.html*" -i dirs.txt -B http://site.io/

なぜなら、-Aおよび-Rリストでディレクトリを使用できるとは思わないからです。 (?)

1
not2qubit