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?

5voto

rkok Punkte 851

Diese Version lädt rekursiv herunter und legt keine übergeordneten Verzeichnisse an.

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"
}

Verwendung:

  1. Hinzufügen zu ~/.bashrc oder im Terminal einfügen
  2. wgetod "http://example.com/x/"

5voto

pr-pal Punkte 2440

Die folgende Option scheint die perfekte Kombination zu sein, wenn es um den rekursiven Download geht:

wget -nd -np -P /dest/dir --rekursiv http://url/dir1/dir2

Einschlägige Auszüge aus den Manualseiten zur Vereinfachung:

   -nd
   --no-directories
       Do not create a hierarchy of directories when retrieving recursively.  With this option turned on, all files will get saved to the current directory, without clobbering (if a name shows up more than once, the
       filenames will get extensions .n).

   -np
   --no-parent
       Do not ever ascend to the parent directory when retrieving recursively.  This is a useful option, since it guarantees that only the files below a certain hierarchy will be downloaded.

3voto

Jordan Gee Punkte 350

Alles, was Sie brauchen, sind zwei Flaggen, eine davon ist "-r" für Rekursion und "--no-parent" (oder -np ), um nicht in die '.' y ".." . Etwa so:

wget -r --no-parent http://example.com/configs/.vim/

Das war's. Es wird in den folgenden lokalen Baum heruntergeladen: ./example.com/configs/.vim . Wenn Sie jedoch die ersten beiden Verzeichnisse nicht wünschen, verwenden Sie das 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 lädt Ihren Dateibaum nur in ./.vim/

Tatsächlich habe ich die erste Zeile dieser Antwort genau aus der wget-Handbuch Sie haben ein sehr sauberes Beispiel am Ende von Abschnitt 4.3.

2voto

Devon Punkte 833

Wget 1.18 könnte besser funktionieren, z.B. wurde ich von einem Fehler der Version 1.12 gebissen, bei dem...

wget --recursive (...)

...ruft nur index.html statt aller Dateien ab.

Die Abhilfe bestand darin, einige 301-Weiterleitungen zu beachten und den neuen Speicherort auszuprobieren - mit der neuen URL konnte wget alle Dateien im Verzeichnis abrufen.

1voto

Tumelo Mapheto Punkte 377

Rekursives wget ignoriert Robots (für Websites)

wget -e robots=off -r -np --page-requisites --convert-links 'http://example.com/folder/'

-e robots=off bewirkt, dass die robots.txt für diese Domäne ignoriert wird

-r macht es rekursiv

-np = no parents, d.h. es werden keine Links zum übergeordneten Ordner verfolgt

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