MediaWiki拡張機能を自動的に更新するbashスクリプトを書けるようになりたいので、このウェブサイトを使おうと思います。https://extdist.wmflabs.org/dist/extensions/そうします。しかし、ご覧のとおり、各 tarball ファイル名には、最後のダッシュ (-) の後にランダムな (または私にはそう見えます) 文字と数字の組み合わせがあります。したがって、私が欲しいのは、このような名前のファイルのみをダウンロードする方法です。extname-REL1_25*.tar.gz
ここで、* は名前のワイルドカードが入る場所であり、extname
必要な拡張子の名前を参照します。
答え1
wget 括弧の展開
パターンに従って複数のファイルをダウンロードするには、wget で中括弧展開を使用します。
例:
wget -c https://extdist.wmflabs.org/dist/extensions/GoogleDocTag-REL1_{22-45203b7,23-249c6f2,24-3186a71,25-10e101f}.tar.gz
オプションの-c
フラグは、ダウンロードが一時停止または中断された場合に、停止した同じポイントからダウンロードを続行します。この-c
オプションは、多数のファイルをダウンロードしていて、中断せずにすべてのファイルを一括でダウンロードしたい場合に便利です。
wget リストから複数のファイルをダウンロードする
例:
lynx -dump "https://extdist.wmflabs.org/dist/skins/" | awk '/http/{print $2}' | uniq >> list.txt
wget -c -E -H -k -K -p -e robots=off -i ./list.txt
wget 再帰的な受け入れ/拒否オプション
再帰的な承認/拒否オプション -A アクセスリスト --アクセスリストを受け入れる -R rejlist --reject rejlist ファイル名のサフィックスまたはパターンをカンマ区切りのリストで指定して 受け入れるか拒否するかを指定します。ワイルドカード文字*、 ?、[または]がacclistまたはrejlistの要素に出現した場合、 接尾辞ではなくパターンとして扱われます。この場合、 シェルがパターンを引用符で囲まないようにする必要があります 拡大しないように、例えば-A「*.mp3」または-A '*.mp3'。
例:
lynx -dump "https://extdist.wmflabs.org/dist/skins/" | awk '/http/{print $2}' | uniq >> list.txt
wget -c -A "Vector*.tar.gz" -E -H -k -K -p -e robots=off -i ./list.txt
両方-A
の-R
オプションですべてのファイルをダウンロードし、その後、accept および reject オプションでパターンに一致しないダウンロード済みファイルを削除します。これは非常に非効率的です。より高速な方法は、何かをダウンロードする前に、list.txt ファイルでパターン マッチングを実行して、list.txt から不要なファイルをすべて削除することです。
すべてのファイルをダウンロードしたいとします。https://extdist.wmflabs.org/dist/extensions/以下の条件を満たすもの:
- バージョン 1.25
- 選択されたMediaWiki拡張機能のみ
すでにlist.txtファイルを作成し、その中にすべてのリンクが含まれていると仮定します。https://extdist.wmflabs.org/dist/extensions/パターン マッチングをサポートするテキスト エディターで list.txt を開き、list.txt の内容をフィルターして、文字列1_25
(バージョン 1.25 を参照) を含む行に一致させ、次にその結果をフィルターして、ダウンロードする ~20 個の拡張子 (20 という数字は重要ではありません) を持つ行に一致させます。次に、結果を new-list.txt という新しいファイルに書き込み (ファイル名 new-list.txt は重要ではありません)、wget のローカル ファイル-i
または外部ファイルから URL を読み取るオプションの後に new-list.txt を使用して複数のファイル (この例では ~20 個) をダウンロードします。
この方法をさらに改善するには、list.txt の内容をフィルタリングして、検索対象の複数の拡張子に一致する文字列を含む拡張子に一致させることで、一致する拡張子の数を減らすことができます。たとえば、文字列がwiki
複数の拡張子に一致する場合、list.txt の内容をフィルタリングして一致させwiki
、少し時間を節約できます。https://extdist.wmflabs.org/dist/extensions/と の両方を含むリンクが 5 つあり1_25
、wiki
2 つのパターンが一致する 5 つのリンクすべてを見つけることができます。
答え2
いいえ、ワイルドカードでは不可能です。しかし、この状況ではwgetは再帰ダウンロードで動作します -https://unix.stackexchange.com/questions/25340/download-recursively-with-wget