Verwenden von wget zum rekursiven Herunterladen ganzer FTP-Verzeichnisse


93

Ich möchte alle Dateien und Ordner von einem Host auf einen anderen kopieren. Die Dateien auf dem alten Host befinden sich unter / var / www / html. Ich habe nur FTP-Zugriff auf diesen Server und kann nicht alle Dateien tarieren. Eine regelmäßige Verbindung zum alten Host über FTP bringt mich zum Ordner / home / admin.

Ich habe versucht, den folgenden Befehl von meinem neuen Server auszuführen:

wget -r ftp://username:password@ip.of.old.host

Aber alles, was ich bekomme, ist eine zusammengesetzte Datei index.html.

Was ist die richtige Syntax für die Verwendung von wget rekursiv über FTP?


2
Beachten Sie, dass wget -r standardmäßig eine maximale Rekursionstiefe von 5 hat. Wenn Sie tiefere Unterverzeichnisse haben, werden diese ignoriert, sofern Sie dies nicht ändern (siehe -l in der Manpage).
mikewaters

Antworten:


125

Versuchen Sie es -mfür--mirror

wget -m ftp://username:password@ip.of.old.host

15
Aus Sicherheitsgründen ist es ratsam, zu verwenden --ask-password, um zu verhindern, dass das Kennwort gespeichert wird history.
Prüfsumme

Das ist so cool. Arbeitete wie ein Zauber ..
Sambhav Sharma

Dies sollte die akzeptierte Antwort sein (für eine bessere Sichtbarkeit).
Donnerstag,

Es enthält keinen Pfad des Verzeichnisses zum Herunterladen, ich denke, @Formoda Antwort ist besser
Wasim A.

@WasimA., Sie können auch hier nur den Verzeichnispfad hinzufügen:wget -m ftp://username:password@ip.of.old.host/mydir/
Alex Che

37

Du hast es richtig gemacht, du brauchst nur ein * am Ende:

wget -r ftp://username:password@1.2.3.4/dir/*

Für gemeinsam genutzte Server können Sie Folgendes verwenden:

wget -r ftp://1.2.3.4/dir/* --ftp-user=username --ftp-password=password

Da die meisten gemeinsam genutzten Server einen FTP-Benutzernamen haben, der etwa "Benutzername @ Hostname" entspricht, funktioniert der erste Befehl wget nicht und der zweite Befehl funktioniert einwandfrei.


1
Dies würde nur ein Verzeichnis tief gehen. Besser die -m Flagge zu benutzen
SvennD

In einigen Fällen funktioniert der zweite Befehl aus Platzgründen nicht. Sie können den ersten Befehl für das gemeinsame Hosting wie folgt verwenden. ** wget -r ftp: / / Benutzername% 40host: Passwort @ Host / dir / **
Wasim A.

Hinweis: Sie sollten entweder -moder verwenden, -r -l infda -r standardmäßig eine Rekursionstiefe von 5 hat. Siehe gnu.org/software/wget/manual/…
ndemou

7

Neben wget können Sie auch lftp im Skriptmodus verwenden. Der folgende Befehl spiegelt den Inhalt eines bestimmten Remote-FTP-Verzeichnisses in das angegebene lokale Verzeichnis und kann in den Cron-Job eingefügt werden:

lftp -c 'open <hostname>; user <username> <password>; mirror -e <remote-src-path> <local-dest-path>; quit'

Es verarbeitet automatisch die Rekursion in Verzeichnisse und ermöglicht die Angabe des Remote-Quellstartverzeichnisses zum Herunterladen von Daten von.


5

Sie können 'curlftpfs - Mounten eines FTP-Hosts als lokales Verzeichnis' verwenden und nach dem Mounten normale Datei-Tools wie 'cp -r' verwenden.


curlftpfshat große Performance-Probleme im libcurl3-gnutls
Moment, es

5

Aktivieren Sie den Befehl wget unten, um Daten rekursiv von FTP herunterzuladen.

wget --user="<user-name>" --password="<password>" -r -np -nH --cut-dirs=1 --reject "index.html*" "<URL to download files>"

-r: Ist für den rekursiven Download.

-np: Ist für keine Eltern aufsteigend.

-nH: Dient zum Deaktivieren der Erstellung eines Verzeichnisses mit dem gleichen Namen wie die URL, dh abc.xyz.com

--cut-dirs: Dient zum Ignorieren der Anzahl der übergeordneten Verzeichnisse. Der Wert dieser Option unterscheidet sich für Ihren Befehl.

Sie können dies überprüfen, indem Sie den obigen Befehl ausführen.



2

Sollte funktionieren versuchen:

wget -r ftp://ftp:ftp@ftp.sunet.se/tst/

2

Verwenden:

wget -m ftp://192.168.0.1

und es werden alle Dateien und Ordner gespiegelt.


Wie gesagt, wenn ich mich über FTP anmelde, wechsle ich in den Ordner / home / admin. Die benötigten Dateien befinden sich in / var / www / html. Wenn ich also den von Ihnen vorgeschlagenen Befehl ausführe, erhalte ich nur den Inhalt von / home / admin Ich habe versucht, es mit 192.168.0.1/var/www/html auszuführen , aber dann wird versucht, CWD / home / admin / var / www / html zu verwenden. Wie bringe ich es vom Stammverzeichnis in diesen Ordner?

Ich habe keine Erfahrung mit diesem speziellen Problem, aber Sie könnten versuchen, einen Symlink zu / var / www / html unter Ihrem Zuhause zu erstellen. Dann könnten Sie eine Adresse wie 192.168.0.1/html
prestomation

Ich habe versucht, einen Symlink zu erstellen, aber dies führte dazu, dass auf meiner lokalen Website ein ähnlicher Symlink erstellt wurde.

1

Das ist die richtige Syntax. Nicht sicher, warum Sie nicht die erwarteten Ergebnisse erzielen.

Wie immer gibt es mehr als eine Möglichkeit, dies zu tun. Versuchen Sie ncftp, insbesondere ncftpget


Ich kann keine weitere Software auf meinem neuen Server installieren. Sollte ich wget nicht anweisen, alle Dateien von / var / www / html herunterzuladen? Ich habe versucht, den Benutzernamen wget -r zu verwenden : password@ip.of.old.host/var/www/html, aber es wurde ein Verzeichnisfehler nicht gefunden.

1

Ich kann verstehen, wenn Sie versuchen, dies in cron oder so etwas zu speichern, aber warum nicht einfach mit Ihrem normalen Client und mget * in den Server ftp? Dies könnte ein schnellerer Weg zum Erfolg sein.


Ich habe mget * ausprobiert, aber es funktionierte nicht mit Unterordnern, da der lokale Unterordner nicht existiert. Gibt es eine Möglichkeit, ihn die lokalen Ordner automatisch erstellen zu lassen?

Abhängig von Ihrem Client erledigt der Schalter -r normalerweise den Trick. IE: mget -r *
dr.pooter

mmm. Der AFAIK-Standard-FTP-Client unter Linux ist nicht dafür ausgelegt, Verzeichnisse rekursiv abzurufen. Ich meine - es gibt keine Option -r. Andere Clients wie ncftp oder lftp unterstützen das rekursive Abrufen, sind jedoch normalerweise nicht standardmäßig verfügbar.
Stann

1

Wie gesagt, wenn ich mich über FTP anmelde, wechsle ich in den Ordner / home / admin. Die benötigten Dateien befinden sich in / var / www / html

Ich denke, das wird in Ihrem Fall funktionieren:

wget -r ftp://192.168.0.1/../../var/www/html

0

Ich bin auf Windows-Hosting mit dem Benutzernamen brinkster / username gestoßen, daher würde wget einen Fehler auslösen, wenn Sie die folgende Syntax verwenden:

wget -m ftp://brinkster/username:password@ip.of.the.host

Um darüber hinwegzukommen, verwenden Sie

wget -m ftp://brinkster%2Fusername:password@ip.of.old.host

Ich musste mich mit Windows Hosting @ Brinkster auseinandersetzen.


-3

wget --user username --password yourpassword ftp://example.com/ftpfiles/filename erledigen die Arbeit oder Sie können * anstelle von Dateiname eingeben: lässt wget an Port denken, der in Ihrem Fall ungültig ist.


Diese Antwort auf eine vier Jahre alte Frage mit mehreren offenen Antworten bietet nichts Neues und lässt sogar die Anforderung einer rekursiven Kopie weg.
Sven
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.