Tüm FTP dizinlerini tekrarlı bir şekilde indirmek için wget kullanma


93

Tüm dosya ve klasörleri bir ana bilgisayardan diğerine kopyalamak istiyorum. Eski ana bilgisayardaki dosyalar / var / www / html dizinindedir ve bu sunucuya yalnızca FTP erişimine sahibim ve tüm dosyaları TAR edemiyorum. FTP aracılığıyla eski ana bilgisayara düzenli bağlantı, beni / home / admin klasörüne getirir.

Yeni sunucumda aşağıdaki komutu çalıştırmayı denedim:

wget -r ftp://username:password@ip.of.old.host

Ama tek aldığım şey bir index.html dosyası.

Wget'ı FTP üzerinde tekrarlı bir şekilde kullanmak için doğru sözdizimi nedir?


2
Varsayılan olarak, wget -r'nin maksimum 5 özyineleme derinliğine sahip olduğunu unutmayın; daha derin bir alt dizininiz varsa, bunu değiştirmediğiniz sürece göz ardı edilirler (man sayfasındaki -l'ye bakın).
mikewaters

Yanıtlar:


125

deneyin -miçin--mirror

wget -m ftp://username:password@ip.of.old.host

15
Güvenlik nedeniyle, --ask-passwordparolanın saklanmasını önlemek için kullanmak iyi olacaktır history.
sağlama toplamı

Bu çok havalı. Bir cazibe gibi çalıştı ..
Sambhav Sharma 7:15

Bu kabul edilen cevap olmalıdır (daha iyi görünürlük için).
bgondy,

indirmek için dizin yolu içermiyor, sanırım @Formoda cevap daha iyi
Wasim A.

@WasimA, ayrıca buraya dizin yolunu da ekleyebilirsiniz:wget -m ftp://username:password@ip.of.old.host/mydir/
Alex Che

37

Haklısın, sonunda bir sonuca ihtiyacın var *:

wget -r ftp://username:password@1.2.3.4/dir/*

Paylaşılan sunucular için şöyle kullanabilirsiniz:

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

Paylaşılan sunucuların çoğu ftp-username kullaniciadi @ hostname gibi bir şey olduğundan, ilk wget komutu çalışmaz ve ikinci komut iyi çalışır.


1
Bu sadece bir dizin derinlemesine gider. -M bayrağını kullanmak için daha iyi
SvennD

Bazı durumlarda ikinci komut alanı nedeniyle çalışmıyor, böyle bir paylaşım için ilk komutu kullanabilirsiniz. ** wget -r ftp: / / kullanıcı adı% 40host: şifre @ host / dir / **
Wasim A.

Not: Ya kullanmalısınız -mveya -r -l inf-r 5. Bkz varsayılan yineleme derinliğini sahip olduğundan gnu.org/software/wget/manual/...
ndemou

7

Wget öğesinin yanında, lftp'yi komut dosyası modunda da kullanabilirsiniz . Aşağıdaki komut belirli bir uzak FTP dizininin içeriğini verilen yerel dizine yansıtacaktır ve cron işine yerleştirilebilir:

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

Dizinlere özyinelemeyi otomatik olarak işler ve veri kaynağının indirileceği uzak kaynak başlangıç ​​dizinini belirlemeye izin verir.


5

'Curlftpfs - bir ftp sunucusunu yerel dizin olarak monte et' seçeneğini kullanabilir ve bir kere monte edildiğinde 'cp -r' gibi normal dosya araçlarını kullanabilirsiniz.


curlftpfslibcurl3-gnutls
Düşmediğiniz

5

Tekrar tekrar FTP'den veri indirmek için aşağıdaki wget komutunu kontrol edin.

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

-r: Özyinelemeli indirmek için var.

-np: Hiçbir artan anne-baba için değildir.

-nH: Adı URL, abc.xyz.com ile aynı olan bir dizin oluşturmak için kullanılır

--cut-dirs: Üst dizin sayısını dikkate almamak içindir. Bu seçeneğin değeri komutunuz için farklı olacaktır.

Yukarıdaki komutu çalıştırarak kontrol edebilirsiniz.



2

Çalışması gerekir denemek:

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

2

kullanın:

wget -m ftp://192.168.0.1

ve tüm dosya ve klasörleri yansıtacaktır.


Dediğim gibi, FTP üzerinden giriş yapmak beni / home / admin klasörüne götürüyor ve ihtiyacım olan dosyalar / var / www / html dizininde. İstediğiniz komutu çalıştırdığımda, yalnızca / home / admin içeriğini alıyorum 192.168.0.1/var/www/html ile çalıştırmayı denedim , ancak daha sonra CWD / home / admin / var / www / html komutunu kullanmaya çalıştı . Kökten bu klasöre gitmesini nasıl sağlayabilirim?

Bu sorunla ilgili hiçbir deneyimim yok, ancak evinizin altındaki / var / www / html ile bir bağlantı oluşturmayı deneyebilirsiniz. Sonra gibi bir adres kullanabilirsiniz 192.168.0.1/html
prestomation

Bir sembolik bağlantı oluşturmayı denedim, ancak yerelde benzer bir sembolik bağlantı oluşturmaya çalıştı.

1

Bu doğru sözdizimi. Beklenen sonuçları neden alamadığınızdan emin değilim.

Her zaman olduğu gibi, yapmanın birden fazla yolu var. Ncftp'yi, özellikle ncftpget'ı deneyin


Yeni sunucuma daha fazla yazılım yükleyemiyorum. Tüm dosyaları / var / www / html adresinden indirmem gerektiğini söylemem gerekir mi? Wget -r kullanıcı adı denedim : password@ip.of.old.host/var/www/html fakat bir dizin bulunamadı.

1

Bunu cron ya da başka bir şeye boşaltmaya çalışıyorsanız anlayabiliyorum, ancak neden normal istemcinizle mget * 'inizle sunucuya ftp yapmıyorsunuz? Bu başarının daha hızlı bir yolu olabilir.


Mget * 'ı denedim ama yerel alt klasörün mevcut olmadığını söyleyerek alt klasörler ile çalışmadı. Yerel klasörleri otomatik olarak oluşturmasını sağlamanın bir yolu var mı?

Müşterinize bağlı olarak, -r anahtarı genellikle hile yapar. IE: mget -r *
dr.pooter 15:09

mmm. Linux'taki AFAIK standart ftp istemcisi dizinleri tekrar tekrar almak için tasarlanmamıştır. Yani - -r seçeneği yok. ncftp veya lftp gibi diğer istemciler özyinelemeli almayı destekler ancak genellikle varsayılan olarak kullanılamazlar.
Stann

1

Dediğim gibi, FTP üzerinden giriş yapmak beni / home / admin klasörüne götürür ve ihtiyacım olan dosyalar / var / www / html dizinindedir.

Sanırım bu sizin durumunuzda işe yarayacak:

wget -r ftp://192.168.0.1/../../var/www/html

0

Windows'da, brinkster / username olarak kullanıcı adıyla karşılaşıyorum, bu yüzden sözdizimini kullanıyorsanız wget hata yapardı:

wget -m ftp://brinkster/username:password@ip.of.the.host

Bunu geçmek için kullan

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

Windows @ barındırma @ brinkster ile yüzleşmek zorunda kaldım.


-3

wget --user username --password yourpassword ftp://example.com/ftpfiles/filename işi yapacak veya dosya adı yerine entring * ekleyebilirsiniz: durumunuzda geçersiz olan portu wget yapar.


Birden fazla açık yanıt içeren dört yıllık bir soruya verilen bu cevap, yeni bir şey sunmuyor ve özyinelemeli bir kopya için gerekliliği bile atlamıyor.
Sven
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.