Cara mengunduh folder melalui FTP di Linux secara rekursif [ditutup]

325

Saya mencoba untuk membuat folder menggunakan klien baris perintah ftp, tapi sejauh ini saya hanya bisa menggunakan 'get' untuk mendapatkan file individual.

Charles Ma
sumber
5
jawaban yang tepat adalah dari 6 April '11 pada 14:13 oleh lkuty. Jangan gunakan mget, itu tidak rekursif sama sekali. jawaban dari 22 Sep '08 di 9:01 Thibaut Barrère lebih mudah dimengerti tetapi harus menambahkan opsi -l 0seperti yang disebutkan dalam komentar
chriscatfr

Jawaban:

635

Anda bisa mengandalkan wget yang biasanya menangani ftp dengan benar (setidaknya dalam pengalaman saya sendiri). Sebagai contoh:

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

Anda juga bisa menggunakan -mmana yang cocok untuk mirroring. Saat ini setara dengan -r -N -l inf.

Jika Anda memiliki beberapa karakter khusus dalam detail kredensial, Anda dapat menentukan --userdan --passwordargumen untuk membuatnya berfungsi. Contoh dengan login khusus dengan karakter tertentu:

wget -r --user="user@login" --password="Pa$$wo|^D" ftp://server.com/

EDIT Seperti yang ditunjukkan oleh @asmaier, perhatikan bahwa meskipun -rhanya untuk rekursi, ia memiliki level maksimum 5:

       -r
       --recursive
           Turn on recursive retrieving.

       -l depth
       --level=depth
           Specify recursion maximum depth level depth.  The default maximum depth is 5.

Jika Anda tidak ingin kehilangan subdirs, lebih baik menggunakan opsi mirroring, -m:

       -m
       --mirror
           Turn on options suitable for mirroring.  This option turns on recursion and time-stamping, sets infinite
           recursion depth and keeps FTP directory listings.  It is currently equivalent to -r -N -l inf
           --no-remove-listing.
Thibaut Barrère
sumber
121
Penggunaan yang lebih baik wget -m( --mirror). wget -rterbatas pada kedalaman rekursi 5 secara default.
asmaier
13
Saya harus menggunakan --userdan --passwordjuga pada Red Hat. Wget saya adalah: GNU Wget 1.11.4 Red Hat modifiedSaya ingin tahu apakah itu versi versi atau distro ...
devin
61
Anda dapat mengatur level rekursi tak terbatas dengan -l 0, jadi tidak perlu menggunakan --mirroryang mungkin memiliki beberapa efek samping yang tidak diinginkan seperti .listing files
Hnatt
28
Saya menggunakan wget --ask-password -rl 99 ftp://[email protected]. Dengan cara ini kata sandi tidak terlihat dengan psdan tidak tetap dalam sejarah. Tentu saja, dengan sifat ftp itu dikirim tidak terenkripsi ke server.
Walter Tross
7
Pengingat untuk bash newb: Anda harus menggunakan tanda kutip tunggal jika nama pengguna atau kata sandi Anda memiliki karakter kontrol (seperti $), misalnya--user='user' --password='pa$$word'
tobek
164

Sekadar melengkapi jawaban yang diberikan oleh Thibaut Barrère.

Saya menggunakan

wget -r -nH --cut-dirs=5 -nc ftp://user:pass@server//absolute/path/to/directory

Perhatikan garis miring ganda setelah nama server. Jika Anda tidak melakukan tebasan ekstra, jalurnya relatif ke direktori home pengguna.

  • -nH menghindari pembuatan direktori bernama setelah nama server
  • -nc menghindari membuat file baru jika sudah ada di tujuan (hanya dilewati)
  • --cut-dirs=5memungkinkan untuk mengambil konten dari direktori / absolute / path / ke / dan untuk meletakkannya di direktori tempat Anda memulai wget. Angka 5 digunakan untuk menyaring 5 komponen jalur. Double slash berarti komponen tambahan.
Ludovic Kuty
sumber
3
Cemerlang. Kemampuan untuk melewati file yang sudah ada sangat bagus untuk mengejar ketinggalan dengan penambahan terbaru pada migrasi server. rsync lebih efisien dan lebih fleksibel, tetapi kadang-kadang opsi itu tidak tersedia, dan hanya FTP yang dapat digunakan.
Jason
Params yang bagus di sini terutama -nc dan --cut-dirs. Terima kasih telah berbagi!
Lance Cleveland
2
Saya tidak selalu percaya "lewati file yang ada" karena salah satu dari keduanya mungkin tidak lengkap atau berbeda dalam ukuran dan isi tetapi bagus ia menyebutkan pilihan
Daniel W.
Bahkan hari ini, saya masih menggunakan perintah wget ini ketika tidak dapat menggunakan rsync. -Nc dan --cut-dir sangat berguna!
Half Crazed
4
Luar biasa! Dan jika Anda tidak ingin memasukkan kata sandi di baris perintah, Anda dapat menggunakan --ftp-user=USERdan --ask-password.
shoover
25
ncftp -u <user> -p <pass> <server>
ncftp> mget directory
Vinko Vrsalovic
sumber
Saya tidak bisa masuk ke server FTP menggunakan params, tetapi menggunakan struktur open ftp://USERNAME:PASSWORD@HOSTsetelah memulai ncftp ...
feeela
+1 - Saya tahu posting ini sudah tua, tetapi saya baru saja menemukannya dan ncftp sangat mudah digunakan. Saya menggunakan -R untuk mendapatkan secara rekursif dengan ncftpget
Zack Macomber
jelas lebih dapat diandalkan daripada wget, dan lebih cepat juga dalam mode TAR. Terima kasih!
lencinhaus
3
Ini tidak berfungsi seperti yang dinyatakan pada Ubuntu 14.04. Sintaks yang bekerja untuk saya adalah "get -R directory" bukan mget.
Ivan
Bekerja untuk saya di Ubuntu 14.04. Saya tidak perlu mgetarkan semua ada di sana.
ashley
22

Jika lftpdiinstal pada mesin Anda, gunakan mirror dir. Dan kamu sudah selesai. Lihat komentar oleh Ciro di bawah ini jika Anda ingin mengunduh direktori secara rekursif.

Dilawar
sumber
7
btw, mirror -R dirapakah pengunggahan / pembaruan direktori rekursif
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
1
juga dapat digunakan mirror ./untuk mengunduh semua file dan folder secara rekursif di jalur saat ini.
Nabi KAZ
Anda juga bisa mengetik mirror, untuk direktori saat ini dan subfoldernya.
Michael
18

Jika Anda dapat menggunakannya scpsebagai gantinya ftp, -ropsi akan melakukan ini untuk Anda. Saya akan memeriksa untuk melihat apakah Anda dapat menggunakan mekanisme transfer file yang lebih modern daripada FTP.

Greg Hewgill
sumber
2
Saya memilih ini karena itu adalah pikiran pertama saya, meskipun tidak sepenuhnya menjawab pertanyaan apa adanya.
metao
Yang mana yang Anda usulkan @ greg-hewgill? Saya memiliki masalah serupa
Michal Gonda
1
scpmasih akan mencoba menggunakan ssh, yang tidak akan berfungsi jika Anda hanya memiliki kredensial FTP. Terasa aneh menanggapi komentar dari 2008 yang mengatakan bahwa teknologi yang saya pakai tidak modern :( Selamat tua 2008, saya berusia 18 tahun saat Anda memposting komentar Anda.
aexl
7

Ada 'ncftp' yang tersedia untuk instalasi di linux. Ini berfungsi pada protokol FTP dan dapat digunakan untuk mengunduh file dan folder secara rekursif. bekerja di linux. Telah digunakan dan berfungsi dengan baik untuk transfer folder / file rekursif.

Periksa tautan ini ... http://www.ncftp.com/

Nol
sumber
2
ncftp bekerja di windows juga
Ilya
Saya suka ncftp! Terima kasih.
jocull
3

Jika Anda bisa, saya sangat menyarankan Anda tardan bzip(atau gzip, apa pun yang mengapung perahu Anda) direktori pada mesin jarak jauh — untuk direktori dengan ukuran signifikan apa pun, penghematan bandwidth mungkin sepadan dengan waktu untuk zip / unzip.

Hank Gay
sumber
Mungkin pada 2008, tetapi pada 2013 bandwidth tidak penting lagi dan Anda mungkin memiliki FTP tetapi tidak mengakses konsol :-)
Daniel W.
3

Jika Anda ingin tetap menggunakan FTP baris perintah, Anda harus mencoba NcFTP. Kemudian Anda bisa menggunakan get -R untuk mendapatkan folder secara rekursif. Anda juga akan mendapatkan penyelesaian.

Jazz
sumber
3

wget -r ftp://url

Bekerja dengan sempurna untuk Redhat dan Ubuntu

Phillip
sumber
1

Anda seharusnya tidak menggunakan ftp. Seperti telnettidak menggunakan protokol aman, dan kata sandi dikirimkan dalam teks yang jelas. Ini memudahkan pihak ketiga untuk menangkap nama pengguna dan kata sandi Anda.

Untuk menyalin direktori jarak jauh, opsi-opsi ini lebih baik:

  • rsyncadalah alat yang paling cocok jika Anda dapat masuk melalui ssh, karena hanya menyalin perbedaan, dan dapat dengan mudah restart di tengah jika koneksi terputus.

  • ssh -r adalah pilihan terbaik kedua untuk menyalin struktur direktori secara rekursif.

Lihat:

  • halaman manual rsync

  • halaman manual ssh

Tilo
sumber
tidak aman, hanya ftp
JosFabre
ini tahun 2015. FTP tidak boleh digunakan.
Tilo
2
Saya setuju. Dan saran untuk keamanan yang lebih baik harus selalu diberikan. Tetapi pertanyaannya adalah tentang FTP, jadi mengatakan seseorang tidak boleh menggunakannya tidak membantu
JosFabre
Dengan hormat saya tidak setuju. Mereka menggunakan alat yang salah untuk pekerjaan itu. Mereka harus belajar menggunakan alat yang aman dan terkini, bukan pada 1980-an. Lebih khusus lagi, tidak ada lagi yang harus menjalankan server ftp: P
Tilo
4
Maaf, tetapi baru minggu lalu saya mengakses server yang hanya memiliki konektivitas FTP. Tugas saya adalah untuk bermigrasi jauh dari itu.
Antti Haapala
-6

beralih prompt dengan perintah PROMPT.

Pemakaian:

ftp>cd /to/directory    
ftp>prompt    
ftp>mget  *
Rohit
sumber
9
Dipilih mundur: mget tidak bersifat rekursif.
Lance Cleveland