Utilizzo di wget per scaricare ricorsivamente intere directory FTP


93

Voglio copiare tutti i file e le cartelle da un host a un altro. I file sul vecchio host si trovano in / var / www / html e ho solo l'accesso FTP a quel server e non riesco a TAR tutti i file. La connessione regolare al vecchio host tramite FTP mi porta alla cartella / home / admin.

Ho provato a eseguire il seguente comando dal mio nuovo server:

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

Ma tutto quello che ottengo è un file index.html inventato.

Qual è la sintassi giusta per usare wget in modo ricorsivo su FTP?


2
Si noti che, per impostazione predefinita, wget -r ha una profondità massima di ricorsione di 5; se hai una sottodirectory più profonda, verranno ignorati a meno che tu non lo cambi (vedi -l nella pagina man).
mikewaters,

Risposte:


125

Prova -mper--mirror

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

15
Per motivi di sicurezza, sarebbe bene usare --ask-passwordper evitare di conservare la password history.
checksum

Questo è veramente forte. Ha funzionato come un fascino ..
Sambhav Sharma,

Questa dovrebbe essere la risposta accettata (per una migliore visibilità).
bgondy,

non include il percorso della directory da scaricare, suppongo che @Formoda risponda meglio
Wasim A.

@WasimA., Puoi semplicemente aggiungere anche il percorso della directory qui:wget -m ftp://username:password@ip.of.old.host/mydir/
Alex Che

37

Hai ragione, hai solo bisogno di un finale * alla fine:

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

Per i server condivisi, è possibile utilizzare in questo modo:

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

Poiché la maggior parte dei server condivisi ha ftp-username qualcosa come username @ hostname, quindi, il primo comando wget non funziona e il secondo comando funziona bene.


1
Questo andrebbe solo in una directory. Meglio usare il flag -m
SvennD

in alcuni casi il secondo comando non funziona a causa dello spazio, è possibile utilizzare il primo comando per condividere l'hosting in questo modo. ** wget -r ftp: / / nome utente% 40host: password @ host / dir / **
Wasim A.

Nota: dovresti usare uno -mo -r -l infperché -r ha una profondità di ricorsione predefinita di 5. Vedi gnu.org/software/wget/manual/…
ndemou,

7

Oltre a wget, puoi anche usare lftp in modalità script. Il comando seguente rispecchierà il contenuto di una determinata directory FTP remota nella directory locale specificata e potrà essere inserito nel processo cron:

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

Gestisce automaticamente la ricorsione in directory e consente di specificare la directory iniziale di origine remota da cui scaricare i dati.


5

Puoi usare 'curlftpfs - montare un host ftp come directory locale' e, una volta montato, puoi usare normali strumenti di file come 'cp -r'.


curlftpfsha grossi problemi di prestazioni in questo momento a meno che non libcurl3-gnutls
effettui il

5

Controlla il seguente comando wget per scaricare i dati da FTP in modo ricorsivo.

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

-r: È per il download ricorsivo.

-np: È per nessun genitore in ascensione.

-nH: Serve per disabilitare la creazione di una directory con nome uguale all'URL, ad esempio abc.xyz.com

--cut-dirs: Serve per ignorare il numero di directory principali. Il valore di questa opzione differirà per il tuo comando.

È possibile verificare eseguendo il comando sopra.



2

Dovrebbe funzionare provare:

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

2

Uso:

wget -m ftp://192.168.0.1

e rispecchierà tutti i file e le cartelle.


Come ho detto, l'accesso tramite FTP mi porta nella cartella / home / admin, e i file di cui ho bisogno sono in / var / www / html Quindi quando eseguo il comando che hai suggerito, ottengo solo il contenuto di / home / admin Ho provato a eseguirlo con 192.168.0.1/var/www/html , ma poi prova a CWD / home / admin / var / www / html. Come posso farlo andare in questa cartella dalla radice?

Non ho esperienza con questo particolare problema, ma potresti provare a creare un link simbolico a / var / www / html sotto casa. Quindi potresti usare un indirizzo come 192.168.0.1/html
prestomation

Ho provato a creare un collegamento simbolico, ma ho ottenuto con wget la creazione di un collegamento simbolico simile sul mio locale.

1

Questa è la sintassi giusta. Non sono sicuro del motivo per cui non stai ottenendo i risultati previsti.

Come sempre c'è più di un modo per farlo. Prova ncftp, in particolare ncftpget


Non riesco a installare più software sul mio nuovo server. Non dovrei dire a wget di scaricare tutti i file da / var / www / html? Ho provato wget -r username: password@ip.of.old.host/var/www/html ma ho riscontrato un errore nella directory non trovata.

1

Posso capire se stai provando a scaricare questo in cron o qualcosa del genere, ma perché non semplicemente ftp nel server con il tuo client normale e mget *? Questo potrebbe essere un percorso più rapido per il successo.


Ho provato mget * ma non ha funzionato con le sottocartelle, dicendo che la sottocartella locale non esiste. C'è un modo per fargli creare automaticamente le cartelle locali?

A seconda del client, l'opzione -r di solito fa il trucco. IE: mget -r *
dr.pooter,

mmm. Il client ftp standard AFAIK in Linux non è progettato per recuperare ricorsivamente directory. Voglio dire, non esiste un'opzione -r. altri client come ncftp o lftp supportano il recupero ricorsivo ma di solito non sono disponibili per impostazione predefinita.
Stann,

1

Come ho detto, l'accesso tramite FTP mi porta nella cartella / home / admin e i file di cui ho bisogno sono in / var / www / html

Penso che funzionerà nel tuo caso:

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

0

Mi sono imbattuto in hosting di Windows con il nome utente come brinkster / nome utente, quindi wget genererebbe un errore se si utilizza la sintassi:

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

Per superare questo, utilizzare

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

Ho dovuto affrontare questo con Windows hosting @ brinkster.


-3

wget --user username --password yourpassword ftp://example.com/ftpfiles/filename farà il lavoro o puoi aggiungere * invece di inserire il nome del file: fa pensare a wget la porta che non è valida nel tuo caso.


Questa risposta a una domanda di quattro anni con più risposte votate non offre nulla di nuovo e omette persino il requisito di una copia ricorsiva.
Sven
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.