694 Stimmen

Verwenden von wget, um rekursiv ein Verzeichnis mit beliebigen Dateien darin zu holen

Ich habe ein Webverzeichnis, in dem ich einige Konfigurationsdateien speichere. Ich möchte wget verwenden, um diese Dateien herunterzuladen und ihre aktuelle Struktur beizubehalten. Das Remote-Verzeichnis sieht zum Beispiel so aus:

http://mysite.com/configs/.vim/

.vim enthält mehrere Dateien und Verzeichnisse. Ich möchte das auf dem Client mit wget replizieren. Ich scheine nicht die richtige Kombination von wget-Flags zu finden, um dies zu erreichen. Hat jemand eine Idee?

17voto

berezovskyi Punkte 2323

Zunächst einmal vielen Dank an alle, die ihre Antworten gepostet haben. Hier ist mein "ultimatives" wget-Skript zum rekursiven Herunterladen einer Website:

wget --recursive ${comment# self-explanatory} \
  --no-parent ${comment# will not crawl links in folders above the base of the URL} \
  --convert-links ${comment# convert links with the domain name to relative and uncrawled to absolute} \
  --random-wait --wait 3 --no-http-keep-alive ${comment# do not get banned} \
  --no-host-directories ${comment# do not create folders with the domain name} \
  --execute robots=off --user-agent=Mozilla/5.0 ${comment# I AM A HUMAN!!!} \
  --level=inf  --accept '*' ${comment# do not limit to 5 levels or common file formats} \
  --reject="index.html*" ${comment# use this option if you need an exact mirror} \
  --cut-dirs=0 ${comment# replace 0 with the number of folders in the path, 0 for the whole domain} \
$URL

Danach, Strippen der Abfrage-Parameter von URLs wie main.css?crc=12324567 und den Betrieb eines lokalen Servers (z. B. über python3 -m http.server in dem Verzeichnis, das Sie gerade wget'ed), um JS auszuführen, kann notwendig sein. Bitte beachten Sie, dass die --convert-links wird erst aktiviert, wenn der Crawl vollständig abgeschlossen ist.

Auch wenn Sie versuchen, eine Website zu wgeten, die möglicherweise bald nicht mehr verfügbar ist, sollten Sie Kontakt mit dem ArchivTeam aufnehmen und bitten Sie sie, Ihre Website in ihre ArchiveBot-Warteschlange aufzunehmen.

11voto

Si --no-parent nicht helfen, können Sie --include Option.

Verzeichnis struct:

http://<host>/downloads/good
http://<host>/downloads/bad

Und Sie möchten Folgendes herunterladen downloads/good aber nicht downloads/bad Verzeichnis:

wget --include downloads/good --mirror --execute robots=off --no-host-directories --cut-dirs=1 --reject="index.html*" --continue http://<host>/downloads/good

8voto

Conor McDermottroe Punkte 1283
wget -r http://mysite.com/configs/.vim/

funktioniert für mich.

Vielleicht haben Sie eine .wgetrc, die das Programm behindert?

7voto

SentientFlesh Punkte 407

Es klingt, als ob Sie versuchen, eine Spiegelung Ihrer Datei zu erhalten. Während wget hat einige interessante FTP- und SFTP-Anwendungen, ein einfacher Spiegel sollte funktionieren. Nur ein paar Überlegungen, um sicherzustellen, dass Sie in der Lage sind, die Datei richtig herunterzuladen.

Respekt robots.txt

Vergewissern Sie sich, dass, wenn Sie eine /robots.txt Datei in Ihrer public_html , www , oder configs Verzeichnis wird das Crawling nicht verhindert. Wenn dies der Fall ist, müssen Sie folgende Anweisungen geben wget zu ignorieren, indem Sie die folgende Option in Ihrem wget Befehl durch Hinzufügen:

wget -e robots=off 'http://your-site.com/configs/.vim/'

Konvertieren Sie entfernte Links in lokale Dateien.

Zusätzlich, wget muss sein beauftragte um Links in heruntergeladene Dateien umzuwandeln. Wenn Sie alles oben genannte richtig gemacht haben, sollten Sie hier keine Probleme haben. Der einfachste Weg, um alle Dateien zu erhalten, vorausgesetzt, es ist nichts hinter einem nicht-öffentlichen Verzeichnis versteckt, ist die Verwendung der mirror Befehl.

Versuchen Sie dies:

wget -mpEk 'http://your-site.com/configs/.vim/'

# If robots.txt is present:

wget -mpEk robots=off 'http://your-site.com/configs/.vim/'

# Good practice to only deal with the highest level directory you specify (instead of downloading all of `mysite.com` you're just mirroring from `.vim`

wget -mpEk robots=off --no-parent 'http://your-site.com/configs/.vim/'

Verwendung von -m anstelle von -r ist vorzuziehen, da es keine maximale Rekursionstiefe gibt und alle Assets heruntergeladen werden. Mirror ist ziemlich gut darin, die volle Tiefe einer Site zu bestimmen, aber wenn Sie viele externe Links haben, könnten Sie am Ende mehr als nur Ihre Site herunterladen, weshalb wir -p -E -k . Alle für die Erstellung der Seite erforderlichen Dateien und eine erhaltene Verzeichnisstruktur sollten die Ausgabe sein. -k konvertiert Links zu lokalen Dateien. Da Sie einen Link eingerichtet haben sollten, sollten Sie Ihren Konfigurationsordner mit einer Datei /.vim .

Der Mirror-Modus funktioniert auch mit einer Verzeichnisstruktur, die als ftp:// auch.

Allgemeine Faustformel:

Je nach der Seite, die Sie spiegeln, senden Sie viele Anrufe an den Server. Um zu verhindern, dass Sie auf die schwarze Liste gesetzt oder abgeschnitten werden, verwenden Sie die wait Option, um die Download-Rate zu begrenzen.

wget -mpEk --no-parent robots=off --random-wait 'http://your-site.com/configs/.vim/'

Wenn Sie aber einfach nur die ../config/.vim/ Datei sollten Sie sich darüber keine Gedanken machen müssen, da Sie übergeordnete Verzeichnisse ignorieren und eine einzelne Datei herunterladen.

5voto

prayagupa Punkte 28548

Um ein Verzeichnis rekursiv mit Benutzername und Passwort abzurufen, verwenden Sie den folgenden Befehl:

wget -r --user=(put username here) --password='(put password here)' --no-parent http://example.com/

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X