Ich muss eine Datei mit wget herunterladen, weiß jedoch nicht genau, wie der Dateiname lautet.
https://foo/bar.1234.tar.gz
Laut der Manpage können Sie mit wget das Globbing bei einer FTP-Site ein- und ausschalten, allerdings habe ich eine http-URL.
Wie kann ich einen Platzhalter verwenden, während ich einen wget verwende? Ich benutze Gnu Wget.
Dinge, die ich versucht habe.
/usr/local/bin/wget -r "https://foo/bar.*.tar.gz" -P /tmp
Aktualisieren
Wenn Sie -A verwenden, werden alle Dateien heruntergeladen, die auf dem Server mit .tar.gz enden.
/usr/local/bin/wget -r "https://foo/" -P /tmp -A "bar.*.tar.gz"
Aktualisieren
Aus den Antworten geht hervor, dass dies die Syntax ist, die letztendlich funktioniert hat.
/usr/local/bin/wget -r -l1 -np "https://foo" -P /tmp -A "bar*.tar.gz"
curl "http://example.com/picture[1-10].jpg" -o "picture#1.jpg"
-e robots=off
, dass robots.txt nicht befolgt wurde: stackoverflow.com/a/11124664/1097104-nH
und--cut-dirs=<number>
war auch nützlichAntworten:
Ich denke, diese Schalter werden tun, was Sie wollen
wget
:Beispiel
quelle
Es gibt einen guten Grund, warum dies nicht direkt mit HTTP funktioniert, und das heißt, dass eine URL kein Dateipfad ist, obwohl die Verwendung
/
als Trennzeichen dazu führen kann, dass sie wie ein solcher aussieht, und sie stimmen manchmal überein. 1Herkömmlicherweise (oder historisch) spiegeln Webserver häufig Verzeichnishierarchien (für einige - z. B. Apache - ist dies eine Art Integral) und stellen sogar Verzeichnisindizes ähnlich einem Dateisystem bereit. Für das HTTP-Protokoll ist dies jedoch nicht erforderlich.
Dies ist von Bedeutung, denn wenn man auf etwa ein glob anwenden wollen, alles , was ein subpath von ist
http://foo/bar/
, es sei denn , der Server einen Mechanismus liefert Ihnen mit einer solchen (zB dem oben erwähnten Index) zur Verfügung zu stellen, gibt es nichts , um es den glob anwenden zu . Es ist kein Dateisystem zum Durchsuchen vorhanden. Zum Beispiel, nur weil Sie wissen , dass es Seitenhttp://foo/bar/one.html
undhttp://foo/bar/two.html
bedeutet nicht , dass Sie eine Liste von Dateien und Unterverzeichnisse über bekommen kannhttp://foo/bar/
. Es wäre völlig im Protokoll, wenn der Server dafür 404 zurückliefe. Oder es könnte eine Liste von Dateien zurückgeben. Oder es könnte Ihnen ein schönes JPG-Bild schicken. Usw.Es gibt hier also keinen Standard, den
wget
man ausnutzen kann. AFAICT, wget spiegelt eine Pfadhierarchie, indem Links auf jeder Seite aktiv untersucht werden . Mit anderen Worten, wenn Sie rekursiv spiegeln , werden Linkshttp://foo/bar/index.html
heruntergeladenindex.html
und extrahiert, die ein Unterpfad davon sind. 2 Der-A
Schalter ist einfach ein Filter, der in diesem Prozess angewendet wird.Kurz gesagt, wenn Sie wissen, dass diese Dateien irgendwo indiziert sind, können Sie damit beginnen
-A
. Wenn nicht, dann haben Sie Pech.1. Natürlich ist eine FTP-URL auch eine URL. Obwohl ich nicht viel über das FTP-Protokoll weiß, würde ich davon ausgehen, dass es eine Form hat, die transparentes Globbing ermöglicht.
2. Dies bedeutet, dass es eine gültige URL geben kann
http://foo/bar/alt/whatever/stuff/
, die nicht enthalten ist, da sie in keiner Weise mit etwas in der Menge der verknüpften Dinge verknüpft isthttp://foo/bar/index.html
. Im Gegensatz zu Dateisystemen sind Webserver nicht verpflichtet, das Layout ihrer Inhalte transparent zu machen, und müssen dies auch nicht auf intuitive Weise tun.quelle
Die oben genannte Lösung mit dem Muster "A" funktioniert möglicherweise nicht auf allen Webseiten. Dies ist meine Abhilfe mit einem doppelten Wget:
wget
Die Seitegrep
für musterwget
die Dateien)Beispiel: Angenommen, es handelt sich um eine Nachrichten-Podcast-Seite, und ich möchte, dass 5 MP3-Dateien oben auf der Seite angezeigt werden:
Der
grep
sucht nach doppelten, in Anführungszeichen gesetzten Links ohne Leerzeichen, die://
meinen Dateinamen enthaltenpattern
.quelle
bash
Manpage. RANDOM Jedes Mal, wenn auf diesen Parameter verwiesen wird, wird eine zufällige Ganzzahl zwischen 0 und 32767 generiert.