2013-08-07 9 views
22

Ist es möglich, Platzhalterzeichen in wget Abfragen beim Herunterladen von Verzeichnissen zu verwenden? Im Grunde habe ich eine Website, sagen wir www.download.example.com/dir/version/package.rpm. Das Versionsverzeichnis ändert sich jedoch ständig und enthält manchmal mehrere RPM-Pakete. Gibt es eine einzige wget-Abfrage, die nur mich und alle Pakete im Verzeichnis version bekommen würde, ohne zu wissen, was diese Version ist? In meiner idealen Welt wäre die Abfrage so etwas wie:Verwenden von Platzhaltern in wget oder curl Abfrage

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

Wenn es einen Weg, dies zu tun mit curl, die auch funktionieren würde.

Antwort

24

Sie können keine Platzhalter in wget verwenden, aber das -A Flag sollte funktionieren. Von der wget manpage:

Sie möchten alle Gifs von einem Verzeichnis auf einem http-Server herunterladen. Sie haben versucht, wget http://www.server.com/dir/*.gif, aber das hat nicht funktioniert, weil HTTP-Abruf Globbing nicht unterstützt. In diesem Fall verwenden: wget -r -l1 --no-parent -A.gif http://www.server.com/dir/

Edit:

Es gibt ein Dienstprogramm LFTP, genannt, die für Globbing eine gewisse Unterstützung hat: ein related question

In Bezug auf Verzeichnisse gefunden. Werfen Sie einen Blick auf die manpage. Es gibt noch eine weitere question on Linux & Unix, die ihre Verwendung in einem ähnlichen Szenario abdeckt.

+1

Ok, das erlaubt mir anzugeben, dass ich nur die '.rpm' Dateien möchte. Das Problem des mehrdeutigen Verzeichnisnamens bleibt jedoch bestehen. Wie sage ich 'wget', dass der Verzeichnisname irrelevant ist und springe einfach zum Verzeichnis, das die RPM-Dateien enthält. – mart1n

+0

@ Mart1n hinzugefügt Info auf LFTP zu beantworten, hoffentlich hilft es –

+0

Ah, ordentlich. LFTP hat tatsächlich ziemlich gut funktioniert. Vielen Dank! – mart1n

1

Obwohl die obige Lösung funktioniert, schlägt es fehl, wenn Sie nur bestimmte Verzeichnisse herunterladen möchten, aber nicht alle. Wenn Sie zum Beispiel haben:

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

Statt die Verzeichnisnamen setzen Sie in einer Textdatei wollen, zB: dirs.txt:

like/ 
like2/ 

Dann wget mit dem folgenden Befehl verwenden Optionen -i dirs.txt -B <base-URL> wie folgt:

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

Si Ich glaube nicht, dass Sie Verzeichnisse in den -A und -R Listen verwenden können. (?)

7

Wenn Sie ein Muster in Ihrer Abfrage finden können, können Sie diese Aufgabe mit der bash brace-Erweiterung durchführen.

Zum Beispiel in Ihrem Fall, Sie so etwas wie verwenden:

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

Auch können Sie diese kombinieren mit den -A und -R Parameter Ihre Ergebnisse zu filtern.

Verwandte Themen