Linux'ta FTP ile bir klasörü özyineli olarak indirme [kapalı]


325

Komut satırı ftp istemcisini kullanarak bir klasörü ftp yapmaya çalışıyorum, ancak şimdiye kadar sadece bireysel dosyaları almak için 'get' kullanabildim.


5
doğru cevap 6 Nisan 11 saat 14:13 lkuty tarafından. Kullanmayın mget, hiç özyinelemez. Eylül 22 '08 at 9:01 Thibaut Barrère anlamak daha kolay ama -l 0yorumlarda belirtildiği gibi seçeneği eklemeniz gerekir
chriscatfr

Yanıtlar:


635

Genellikle ftp düzgün olsun (en azından kendi deneyimim) kolları wget güvenebilirsiniz. Örneğin:

wget -r ftp://user:pass@server.com/

-mAynalama için uygun olanı da kullanabilirsiniz . Şu anda ile eşdeğerdir -r -N -l inf.

Kimlik bilgileri ayrıntılarında bazı özel karakterler varsa, işe yaraması için --userve --passwordbağımsız değişkenlerini belirtebilirsiniz . Belirli karakterlerle özel girişe sahip örnek:

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

DÜZENLEME @asmaier tarafından işaret edildiği gibi, -rözyineleme için olsa bile , varsayılan maksimum 5 seviyesine sahip olduğuna dikkat edin :

       -r
       --recursive
           Turn on recursive retrieving.

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

Alt dizinleri kaçırmak istemiyorsanız, yansıtma seçeneğini kullanmanız daha iyi olur -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.

121
Daha iyi kullanım wget -m( --mirror). wget -rvarsayılan olarak 5 özyineleme derinliği ile sınırlıdır.
asmaier

13
Ben kullanımına vardı --userve --passwordçok Red Hat üzerinde. Benim ümitim: GNU Wget 1.11.4 Red Hat modifiedAcaba sürüm versiyonu mu yoksa dağıtım mı ...
devin

61
İle sonsuz özyineleme düzeyi ayarlayabilirsiniz -l 0, bu nedenle --mirror.listing dosyaları gibi bazı istenmeyen yan etkileri olabilecek kullanmaya gerek yoktur
Hnatt

28
Ben kullanıyorum wget --ask-password -rl 99 ftp://user@server.com. Bu şekilde parola ile görünmez psve geçmişte kalmaz. Tabii ki, ftp doğası gereği sunucuya şifrelenmemiş olarak gönderilir.
Walter Tross

7
Bash newbs için hatırlatma: kullanıcı adınız veya şifreniz kontrol karakterleri (örneğin $) --user='user' --password='pa$$word'
içeriyorsa

164

Sadece Thibaut Barrère'in verdiği cevabı tamamlamak için.

kullandım

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

Sunucu adından sonraki çift eğik çizgiye dikkat edin. Fazladan eğik çizgi koymazsanız, yol kullanıcının giriş dizinine göredir.

  • -nH sunucu adından sonra bir dizin oluşturulmasını önler
  • -nc hedefte zaten varsa yeni bir dosya oluşturmaktan kaçınır (sadece atlanır)
  • --cut-dirs=5/ absolute / path / to / dizininin içeriğini almanıza ve wget'i başlattığınız dizine koymanıza izin verir. 5 sayısı, yolun 5 bileşenini filtrelemek için kullanılır. Çift eğik çizgi ekstra bir bileşen anlamına gelir.

3
Parlak. Zaten var olan dosyaları atlama yeteneği, sunucu geçişindeki en son eklemelere yetişmek için mükemmeldir. rsync daha verimli ve daha esnektir, ancak bazen bu seçenek kullanılamaz ve yalnızca FTP kullanılabilir.
Jason

Burada güzel params özellikle -nc ve --cut-dirs. Paylaşım için teşekkürler!
Lance Cleveland

2
Her zaman "mevcut dosyaları atla" ya güvenmiyorum çünkü biri eksik veya farklı boyutta ve içerikte olabilir ama iyi seçenekten bahsetti
Daniel W.

Bugün bile, bu wget komutunu rsync kullanamadığımda kullanıyorum. -Nc ve --cut-dirs çok kullanışlı!
Half Crazed

4
Müthiş! Eğer komut satırında şifrenizi koymak istemiyorsanız, siz kullanabilirsiniz --ftp-user=USERve --ask-password.
shoover

25
ncftp -u <user> -p <pass> <server>
ncftp> mget directory

open ftp://USERNAME:PASSWORD@HOST
Parametre

+1 - Bu yazının eski olduğunu biliyorum, ama yeni rastladım ve ncftp'nin kullanımı gerçekten kolaydı. Ben ncftpget ile özyinelemeli almak için -R kullandım
Zack Macomber

wgetTAR modunda kesinlikle daha güvenilir ve daha hızlı. Teşekkürler!
lencinhaus

3
Bu Ubuntu 14.04'te belirtildiği gibi çalışmaz. Benim için çalışan sözdizimi mget yerine "get -R dizini" idi.
Ivan

Ubuntu 14.04'te benim için çalıştı. Sadece orada olduğunu mget zorunda değildi.
ashley

22

Eğer lftpmakinenizde, kullanım yüklü mirror dir. Ve işiniz bitti. Bir dizini özyinelemeli olarak indirmek istiyorsanız aşağıdaki Ciro'nun yorumuna bakın.


7
btw, mirror -R dirözyinelemeli dizin yükleme / güncelleme yapar
Ciro Santilli 法轮功 冠状 病 六四 事件 法轮功

1
Ayrıca mirror ./geçerli yoldaki tüm dosya ve klasör özyinelemeli olarak indirmek için kullanabilirsiniz .
Nabi KAZ

mirrorGeçerli dizin ve alt klasörleri için de yalnızca yazabilirsiniz .
Michael

17

scpBunun yerine kullanabiliyorsanız ftp, -rseçenek bunu sizin için yapar. FTP'den daha modern bir dosya aktarım mekanizması kullanıp kullanamayacağınızı kontrol ediyorum.


2
Bu soruya oy verdim, çünkü soruyu olduğu gibi kesinlikle cevaplamasa da, bu benim ilk düşüncemdi.
metao

Hangisini teklif edersiniz @ greg-hewgill? Benzer bir sorunum var
Michal Gonda

1
scpyine de yalnızca FTP kimlik bilgileriniz varsa çalışmazsa ssh kullanmaya çalışır. Yaptığım teknolojinin modern olmadığını söyleyerek 2008'den gelen bir yoruma cevap vermek garip geliyor :( İyi eski 2008, yorumunuzu yayınladığınız gün 18
yaşına girdim


7

Linux'ta kurulum için mevcut olan 'ncftp' vardır. Bu, FTP protokolünde çalışır ve dosyaları ve klasörleri özyinelemeli olarak indirmek için kullanılabilir. Linux üzerinde çalışır. Kullanıldı ve özyinelemeli klasör / dosya aktarımı için iyi çalışıyor.

Bu bağlantıyı kontrol edin ... http://www.ncftp.com/


2
pencerelerde de ncftp çalışması
Ilya

Ben ncftp seviyorum! Teşekkür ederim.
jocull

3

Mümkünse, size tarve bzip(veya gzipteknenizde yüzen ne olursa olsun) uzak makinedeki dizini şiddetle öneririm - herhangi bir önemli boyuttaki bir dizin için, bant genişliği tasarrufu muhtemelen zip / unzip için zaman ayırmaya değer olacaktır.


Belki 2008 yılında, ancak 2013 yılında :-) bant genişliği meselesi artık değil ve FTP var ama erişimini teselli olmayabilir
Daniel W.

3

Komut satırı FTP'sine bağlı kalmak istiyorsanız, NcFTP'yi denemelisiniz. Sonra bir klasörü özyinelemeli olarak almak için get -R komutunu kullanabilirsiniz. Ayrıca tamamlanacaktır.


3

wget -r ftp://url

Redhat ve Ubuntu için mükemmel çalışın


1

Kullanmamalısınız ftp. Sevmektelnet kendisine güvenli protokoller kullanılarak değildir ve şifreler açık metin olarak iletilir. Bu, üçüncü tarafların kullanıcı adınızı ve şifrenizi yakalamasını çok kolaylaştırır.

Uzak dizinleri uzaktan kopyalamak için bu seçenekler daha iyidir:

  • rsyncüzerinden giriş yapabiliyorsanız en uygun araçtır ssh, çünkü sadece farklılıkları kopyalar ve bağlantı kopması durumunda kolayca ortada yeniden başlatılabilir.

  • ssh -r dizin yapılarını özyineli olarak kopyalamak için en iyi ikinci seçenektir.

Görmek:


güvenli değil, sadece ftp
JosFabre

FTP 2015 kullanılmamalıdır.
Tilo

1
Katılıyorum. Ve her zaman daha iyi güvenlik önerileri verilmelidir. Ancak soru FTP hakkındaydı, bu yüzden birisinin kullanmaması gerektiğini söylemek yardımcı
olmuyor

Saygılarımla katılmıyorum. İş için yanlış aracı kullanıyorlar. 1980 ftp yerine güvenli ve güncel araçlar kullanmayı öğrenmelidirler. Daha spesifik olarak, kimse artık bir ftp sunucusu çalıştırmamalıdır: P
Tilo

4
Üzgünüm ama geçen hafta sadece FTP bağlantısı olan bir sunucuya erişiyordum. Benim görevim ondan uzaklaşmaktı .
Antti Haapala

-6

istemi PROMPT komutuyla değiştirin.

Kullanımı:

ftp>cd /to/directory    
ftp>prompt    
ftp>mget  *

8
Down0-oyladı: mget özyinelemeli değil.
Lance Cleveland
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.