Menggunakan wget untuk mengunduh seluruh direktori FTP secara rekursif

93

Saya ingin menyalin semua file dan folder dari satu host ke yang lain. File-file pada host lama duduk di / var / www / html dan saya hanya memiliki akses FTP ke server itu, dan saya tidak bisa TAR semua file. Koneksi reguler ke host lama melalui FTP membawa saya ke folder / home / admin.

Saya mencoba menjalankan perintah berikut dari server baru saya:

wget -r ftp://username:[email protected]

Tapi yang saya dapatkan hanyalah file index.html yang dibuat.

Apa sintaks yang tepat untuk menggunakan wget secara rekursif melalui FTP?


sumber
2
Perhatikan bahwa, secara default, wget -r memiliki kedalaman rekursi maksimum 5; jika Anda memiliki subdirektori yang lebih dalam, mereka akan diabaikan kecuali Anda mengubahnya (lihat -l di halaman manual).
mikewaters

Jawaban:

125

Cobalah -muntuk--mirror

wget -m ftp://username:[email protected]
Dave Cheney
sumber
15
Untuk alasan keamanan, sebaiknya digunakan --ask-passworduntuk menghindari kata sandi disimpan history.
checksum
Ini sangat keren. Bekerja seperti pesona ..
Sambhav Sharma
Ini harus menjadi jawaban yang diterima (untuk visibilitas yang lebih baik).
bgondy
itu tidak termasuk jalur direktori untuk diunduh, saya kira jawaban @Formoda lebih baik
Wasim A.
@WasimA., Anda bisa menambahkan jalur direktori di sini juga:wget -m ftp://username:[email protected]/mydir/
Alex Che
37

Anda benar, Anda hanya perlu * di akhir:

wget -r ftp://username:[email protected]/dir/*

Untuk server bersama, Anda dapat menggunakan seperti ini:

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

Karena sebagian besar server bersama memiliki ftp-username sesuatu seperti nama pengguna @ hostname, jadi, perintah wget pertama tidak berfungsi, dan perintah kedua berfungsi dengan baik.

Banee Ishaque K
sumber
1
Ini hanya akan masuk satu direktori yang dalam. Lebih baik menggunakan flag -m
SvennD
dalam beberapa kasus perintah kedua tidak berfungsi karena ruang, Anda dapat menggunakan perintah pertama untuk berbagi hosting seperti ini. ** wget -r ftp: / / nama pengguna% 40host: kata sandi @ host / dir / **
Wasim A.
Catatan: Anda harus menggunakan salah satu -matau -r -l infkarena -r memiliki kedalaman rekursi default 5. Lihat gnu.org/software/wget/manual/…
ndemou
7

Selain wget, Anda juga dapat menggunakan lftp dalam mode skrip. Perintah berikut akan mencerminkan konten direktori FTP jarak jauh yang diberikan ke direktori lokal yang diberikan, dan itu dapat dimasukkan ke dalam tugas cron:

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

Secara otomatis menangani rekursi ke direktori dan memungkinkan menentukan direktori awal sumber jarak jauh dari untuk mengunduh data.

Zappan
sumber
5

Anda dapat menggunakan 'curlftpfs - me-mount host ftp sebagai direktori lokal' dan, setelah di-mount, Anda dapat menggunakan alat file normal seperti 'cp -r'.

chmeee
sumber
curlftpfsmemiliki masalah kinerja besar sekarang kecuali Anda menurunkan versilibcurl3-gnutls
Hengjie
5

Periksa perintah wget di bawah ini untuk mengunduh data dari FTP secara rekursif.

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

-r: Apakah untuk mengunduh secara rekursif.

-np: Tidak untuk orang tua yang naik.

-nH: Apakah untuk menonaktifkan pembuatan direktori yang memiliki nama sama dengan URL yaitu abc.xyz.com

--cut-dirs: Apakah untuk mengabaikan jumlah direktori induk. Nilai opsi ini akan berbeda untuk perintah Anda.

Anda dapat memeriksa dengan menjalankan perintah di atas.

AVJ
sumber
2

Menggunakan:

wget -m ftp://192.168.0.1

dan itu akan mencerminkan semua file dan folder.

Rajat
sumber
Seperti yang saya katakan, masuk melalui FTP akan membawa saya ke folder / home / admin, dan file yang saya butuhkan ada di / var / www / html Jadi ketika saya menjalankan perintah yang Anda sarankan, saya hanya mendapatkan konten dari / home / admin Saya mencoba menjalankannya dengan 192.168.0.1/var/www/html , tetapi kemudian mencoba untuk CWD / home / admin / var / www / html. Bagaimana cara membuatnya ke folder ini dari root?
Saya tidak punya pengalaman dengan masalah khusus ini, tetapi Anda bisa mencoba membuat symlink ke / var / www / html di bawah rumah Anda. Kemudian Anda dapat menggunakan alamat seperti 192.168.0.1/html
prestomation
Saya mencoba membuat symlink, tetapi hasilnya dengan wget membuat symlink serupa di lokal saya.
1

Itu sintaks yang tepat. Tidak yakin mengapa Anda tidak mendapatkan hasil yang diharapkan.

Seperti biasa, ada lebih dari satu cara untuk melakukannya. Coba ncftp, khususnya ncftpget

goo
sumber
Saya tidak dapat menginstal lebih banyak perangkat lunak di server baru saya. Tidakkah seharusnya saya memberi tahu wget untuk mengunduh semua file dari / var / www / html? Saya mencoba wget -r username: [email protected]/var/www/html tapi saya mendapat direktori tidak ditemukan kesalahan.
1

Saya bisa mengerti jika Anda mencoba untuk membuang ini ke cron atau sesuatu, tetapi mengapa tidak dengan mudah ftp ke server dengan klien normal Anda dan mget *? Ini mungkin jalan yang lebih cepat menuju sukses.

dr.pooter
sumber
Saya mencoba mget * tetapi tidak berfungsi dengan sub-folder, mengatakan sub-folder lokal tidak ada. Apakah ada cara untuk membuatnya membuat folder lokal secara otomatis?
Tergantung pada klien Anda, -r switch biasanya melakukan trik. IE: mget -r *
dr.pooter
mmm AFAIK standard ftp client di linux tidak dirancang untuk mengambil direktori secara rekursif. Maksud saya - tidak ada opsi -r. klien lain seperti ncftp atau lftp mendukung pengambilan rekursif tetapi mereka biasanya tidak tersedia secara default.
Stann
1

Seperti yang saya katakan, masuk melalui FTP membawa saya ke folder / home / admin, dan file yang saya butuhkan ada di / var / www / html

Saya pikir ini akan berhasil dalam kasus Anda:

wget -r ftp://192.168.0.1/../../var/www/html
kubanczyk
sumber
0

Saya menemukan hosting Windows dengan nama pengguna sebagai brinkster / nama pengguna, jadi wget akan membuat kesalahan jika Anda menggunakan sintaks:

wget -m ftp://brinkster/username:[email protected]

Untuk melewati ini, gunakan

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

Saya harus menghadapi ini dengan Windows hosting @ brinkster.

Anto Joseph
sumber
-3

wget --user username --password yourpassword ftp://example.com/ftpfiles/filename akan melakukan pekerjaan atau Anda dapat menambahkan * alih-alih nama file yang dimasukkan: membuat wget memikirkan port yang tidak valid dalam kasus Anda.

Khushwant Singh
sumber
Jawaban untuk pertanyaan empat tahun ini dengan beberapa jawaban ter-upgrade tidak menawarkan sesuatu yang baru dan bahkan menghilangkan persyaratan untuk salinan rekursif.
Sven