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.