Ich möchte in der Lage sein, ein Bash-Skript zu schreiben, um meine MediaWiki-Erweiterungen automatisch zu aktualisieren, und ich denke, ich werde diese Website verwendenhttps://extdist.wmflabs.org/dist/extensions/um dies zu tun. Aber wie Sie dort sehen können, hat jeder Tarball-Dateiname eine zufällige (oder so scheint es mir zumindest) Kombination aus Buchstaben und Zahlen nach dem letzten Bindestrich (-). Ich hätte also gerne eine Möglichkeit, nur Dateien mit dieser Art von Namen herunterzuladen, extname-REL1_25*.tar.gz
wobei * die Stelle ist, an der das Platzhalterzeichen im Namen eingefügt wird und extname
sich auf den Namen der gewünschten Erweiterung bezieht.
Antwort1
wget Klammererweiterung
Verwenden Sie die Klammererweiterung mit wget, um mehrere Dateien nach einem Muster herunterzuladen.
Beispiel:
wget -c https://extdist.wmflabs.org/dist/extensions/GoogleDocTag-REL1_{22-45203b7,23-249c6f2,24-3186a71,25-10e101f}.tar.gz
Das optionale -c
Flag setzt den Download fort, wenn er angehalten oder an derselben Stelle unterbrochen wird, an der er gestoppt wurde. Die -c
Option ist nützlich, wenn Sie eine große Anzahl von Dateien herunterladen und alle Dateien in einem Stapel ohne Unterbrechungen herunterladen möchten.
wget lädt mehrere Dateien aus einer Liste herunter
Beispiel:
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 rekursive Akzeptieren/Ablehnen-Optionen
Rekursive Akzeptieren/Ablehnen-Optionen -A Zugriffsliste --accept Zugriffsliste -R Rej-Liste --reject Rej-Liste Geben Sie durch Kommas getrennte Listen von Dateinamensuffixen oder Mustern an, um akzeptieren oder ablehnen. Beachten Sie, dass bei Verwendung der Platzhalterzeichen *, ?, [ oder ] in einem Element von acclist oder rejlist erscheinen, wird es als Muster und nicht als Suffix behandelt. In diesem Fall müssen Sie das Muster in Anführungszeichen setzen, um zu verhindern, dass Ihre Shell davon ab, es zu erweitern, wie in-Eine "*.mp3"oder-Ein '*.mp3'.
Beispiel:
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
Beide -A
Optionen -R
laden alle Dateien herunter und dann löschen die Optionen „Akzeptieren“ und „Ablehnen“ die heruntergeladenen Dateien, die nicht dem Muster entsprechen. Das ist schrecklich ineffizient. Eine schnellere Möglichkeit wäre, den Musterabgleich auf die Datei „list.txt“ anzuwenden, um alle unerwünschten Dateien aus „list.txt“ zu entfernen, bevor irgendetwas heruntergeladen wird.
Angenommen, Sie möchten alle Dateien herunterladen vonhttps://extdist.wmflabs.org/dist/extensions/die die folgenden Bedingungen erfüllen:
- Version 1.25
- nur die ausgewählten MediaWiki-Erweiterungen
Vorausgesetzt, Sie haben bereits eine Datei list.txt erstellt, die alle Links inhttps://extdist.wmflabs.org/dist/extensions/, öffnen Sie list.txt in einem Texteditor, der Mustervergleiche unterstützt, und filtern den Inhalt von list.txt, um Zeilen mit der Zeichenfolge 1_25
(die sich auf Version 1.25 bezieht) abzugleichen, und filtern diese Ergebnisse dann, um Zeilen mit den ~20 Erweiterungen (die Zahl 20 ist nicht wichtig) abzugleichen, die Sie herunterladen möchten. Schreiben Sie dann die Ergebnisse in eine neue Datei namens new-list.txt (der Dateiname new-list.txt ist nicht wichtig) und laden Sie die mehreren Dateien (in diesem Beispiel ~20 an der Zahl) mit new-list.txt nach der -i
Option von wget herunter, URLs aus einer lokalen oder externen Datei zu lesen.
Eine weitere Verbesserung dieser Methode wäre, die Anzahl der zu vergleichenden Erweiterungen zu reduzieren, indem der Inhalt von list.txt gefiltert wird, um Erweiterungen abzugleichen, die Zeichenfolgen enthalten, die mit mehr als einer der gesuchten Erweiterungen übereinstimmen. Wenn die Zeichenfolge beispielsweise mit wiki
mehreren gesuchten Erweiterungen übereinstimmt, können Sie den Inhalt von list.txt filtern, um wiki
ein wenig Zeit zu sparen. Inhttps://extdist.wmflabs.org/dist/extensions/Es gibt fünf Links, die sowohl als 1_25
auch enthalten wiki
, und Sie können alle fünf Links mit zwei Musterübereinstimmungen finden.
Antwort2
Nein, mit Platzhaltern ist das nicht möglich. Aber in dieser Situation funktioniert wget mit rekursivem Download -https://unix.stackexchange.com/questions/25340/download-recursively-with-wget