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:[email protected]

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?


quelle
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:[email protected]
Dave Cheney
quelle
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:[email protected]/mydir/
Alex Che
37

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

wget -r ftp://username:[email protected]/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.

Banee Ishaque K
quelle
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.

Zappan
quelle
5

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

chmeee
quelle
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.

AVJ
quelle
2

Verwenden:

wget -m ftp://192.168.0.1

und es werden alle Dateien und Ordner gespiegelt.

Rajat
quelle
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

Schmiere
quelle
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 : [email protected]/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.

dr.pooter
quelle
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
kubanczyk
quelle
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:[email protected]

Um darüber hinwegzukommen, verwenden Sie

wget -m ftp://brinkster%2Fusername:[email protected]

Ich musste mich mit Windows Hosting @ Brinkster auseinandersetzen.

Anto Joseph
quelle
-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.

Khushwant Singh
quelle
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