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:password@ip.of.old.host

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

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


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:password@ip.of.old.host

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:password@ip.of.old.host/mydir/
Alex Che

37

Anda benar, Anda hanya perlu * di akhir:

wget -r ftp://username:password@1.2.3.4/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.


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.


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'.


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.



2

Harus berhasil coba:

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

2

Menggunakan:

wget -m ftp://192.168.0.1

dan itu akan mencerminkan semua file dan folder.


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


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: password@ip.of.old.host/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.


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

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:password@ip.of.the.host

Untuk melewati ini, gunakan

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

Saya harus menghadapi ini dengan Windows hosting @ brinkster.


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


Jawaban untuk pertanyaan empat tahun ini dengan beberapa jawaban ter-upgrade tidak menawarkan sesuatu yang baru dan bahkan menghilangkan persyaratan untuk salinan rekursif.
Sven
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.