Mit wget rekursiv ein Verzeichnis mit beliebigen Dateien darin holen
Frage
Ich habe ein Web-Verzeichnis, in dem ich einige Konfigurationsdateien speichern. Ich mag wget benutzen, um die Dateien nach unten ziehen und ihre derzeitigen Struktur beizubehalten. Zum Beispiel sieht das Remote-Verzeichnis wie:
http://mysite.com/configs/.vim/
.vim hält mehrere Dateien und Verzeichnisse. Ich möchte, dass mit wget auf dem Client replizieren. Kann nicht scheinen, die richtige Kombination aus wget Flaggen zu finden dies getan. Irgendwelche Ideen?
Lösung
Sie haben die -np
/ --no-parent
Option zu übergeben (zusätzlich / wget
-r
, natürlich) --recursive
, sonst wird es den Link in dem Verzeichnisindex auf meiner Website des übergeordneten Verzeichnis folgen. So ist der Befehl würde wie folgt aussehen:
wget --recursive --no-parent http://example.com/configs/.vim/
Um zu vermeiden, die automatisch generierten index.html
das Herunterladen von Dateien, verwenden Sie die -R
/ --reject
Option:
wget -r -np -R "index.html*" http://example.com/configs/.vim/
Andere Tipps
Um ein Verzeichnis rekursiv herunterladen, die index.html * Dateien und Downloads ohne den Hostnamen, übergeordnete Verzeichnis und die gesamte Verzeichnisstruktur verwirft:
wget -r -nH --cut-dirs=2 --no-parent --reject="index.html*" http://mysite.com/dir1/dir2/data
Für alle anderen, dass ähnliche Fragen. Wget folgt robots.txt
, die Sie die Website greifen könnten nicht zulassen. Keine Sorge, Sie können es deaktivieren:
wget -e robots=off http://www.example.com/
http://www.gnu.org/software/wget/manual/html_node /Robot-Exclusion.html
Sie sollten den -m (Spiegel) Flag verwenden, so dass die Pflege braucht, um nicht verwirrt mit Zeitstempel und auf unbestimmte Zeit Rekursion.
wget -m http://example.com/configs/.vim/
Wenn Sie die Punkte hinzufügen, die von anderen in diesem Thread erwähnt, es sei:
wget -m -e robots=off --no-parent http://example.com/configs/.vim/
Hier ist der komplette wget-Befehl, der für mich gearbeitet Dateien von einem Server des Verzeichnis zum Download (ohne Berücksichtigung robots.txt
):
wget -e robots=off --cut-dirs=3 --user-agent=Mozilla/5.0 --reject="index.html*" --no-parent --recursive --relative --level=1 --no-directories http://www.example.com/archive/example/5.3.0/
Wenn --no-parent
nicht helfen, können Sie --include
Option verwenden.
Verzeichnis-Struktur:
http://<host>/downloads/good
http://<host>/downloads/bad
Und Sie wollen downloads/good
herunterladen, 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
wget -r http://mysite.com/configs/.vim/
funktioniert für mich.
Vielleicht haben Sie eine .wgetrc die mit ihm stört?
Um ein Verzeichnis rekursiv mit Benutzername und Passwort zu holen, verwenden Sie den folgenden Befehl ein:
wget -r --user=(put username here) --password='(put password here)' --no-parent http://example.com/
Alles, was Sie brauchen, ist zwei Flaggen, ist "-r"
für Rekursion und "--no-parent"
(oder -np
), um in der '.'
und ".."
nicht zu gehen. Wie folgt aus:
wget -r --no-parent http://example.com/configs/.vim/
Das ist es. Es wird heruntergeladen in den folgenden lokalen Baum: ./example.com/configs/.vim
.
Allerdings, wenn Sie nicht über die ersten beiden Verzeichnisse wollen, dann verwenden Sie die zusätzliche Flag --cut-dirs=2
wie in früheren Antworten vorgeschlagen:
wget -r --no-parent --cut-dirs=2 http://example.com/configs/.vim/
Und es wird Ihren Dateibaum nur in ./.vim/
herunterladen
In der Tat habe ich die erste Zeile aus dieser Antwort gerade aus dem wget Handbuch , sie haben ein sehr sauberes Beispiel gegen Ende des Abschnitts 4.3.
Es soll möglich sein, es einfach zu tun, indem ein -r Hinzufügen
wget -r http://stackoverflow.com/
Wget 1.18 kann besser funktionieren, zum Beispiel, wurde ich von einer Version 1.12 Bug gebissen wurde, wo ...
wget --recursive (...)
... nur abruft index.html statt alle Dateien.
Behelfslösung war einige 301 Umleitungen zu bemerken und den neuen Standort versuchen -. Die neue URL gegeben, wget hat alle Dateien im Verzeichnis
Diese Version herunterlädt rekursiv und erstellt keine übergeordnete Verzeichnisse.
wgetod() {
NSLASH="$(echo "$1" | perl -pe 's|.*://[^/]+(.*?)/?$|\1|' | grep -o / | wc -l)"
NCUT=$((NSLASH > 0 ? NSLASH-1 : 0))
wget -r -nH --user-agent=Mozilla/5.0 --cut-dirs=$NCUT --no-parent --reject="index.html*" "$1"
}
Verbrauch:
- In den
~/.bashrc
oder in Terminal einfügen -
wgetod "http://example.com/x/"