Çevrimiçi dosyalar / klasörler listesinde göründükleri şekliyle tüm dosyaları ve alt dizinleri içeren HTTP dizinini nasıl indirebilirim?


189

Erişebileceğim bir çevrimiçi HTTP dizini var. Tüm alt dizinleri ve dosyaları indirmeye çalıştım wget. Ancak sorun, wgetalt index.htmldizinleri indirirken, dosyaları kendileri indirmeden o dizindeki dosyaların listesini içeren dosyayı indirmesidir.

Alt dizinleri ve dosyaları derinlik sınırı olmadan indirmenin bir yolu var mı (indirmek istediğim dizin sadece bilgisayarıma kopyalamak istediğim bir klasör gibi).

çevrimiçi HTTP dizini

Yanıtlar:


357

Çözüm:

wget -r -np -nH --cut-dirs=3 -R index.html http://hostname/aaa/bbb/ccc/ddd/

Açıklama:

  • Tüm dosyaları ve alt klasörleri ddd dizinine indirir
  • -r : tekrarlı
  • -np: ccc / gibi üst dizinlere gitmemek
  • -nH : dosyaları ana bilgisayar adı klasörüne kaydetmiyor
  • --cut-dirs=3: Ancak kaydetmeden için ddd ilk 3 klasör atlanması ile aaa , bbb , ccc
  • -R index.html: index.html dosyaları hariç

Referans: http://bmwieczorek.wordpress.com/2008/10/01/wget-recursively-download-all-files-from-certain-directory-listed-by-apache/


17
Teşekkür ederim! Ayrıca, Bilginize göre bu kullanabileceğiniz -Rgibi -R csstüm CSS dosyalarını dışlamak veya kullanmak üzere -Agibi -A pdfsadece indirme PDF dosyalarına.
John

7
Teşekkürler! Wget man page When downloading from Internet servers, consider using the ‘-w’ option to introduce a delay between accesses to the server. The download will take a while longer, but the server administrator will not be alarmed by your rudeness.
jgrump2012

3
Bu hatayı alıyorum 'wget' dahili veya harici komut, çalıştırılabilir program veya toplu iş dosyası olarak tanınmıyor.
hamish

1
@hamish önce wget yüklemeniz gerekebilir veya wget $ PATH'nizde değil.
Mingjiang Shi

16
Harika yanıt, ancak robots.txtdizindeki dosyaların indirilmesine izin vermeyen bir dosya varsa , bunun işe yaramayacağını unutmayın. Bu durumda eklemeniz gerekir -e robots=off . Bkz. Unix.stackexchange.com/a/252564/10312
Daniel Hershcovich

45

VisualWGet kullanarak bu yazı sayesinde işe almak mümkün . Çok işime yaradı. Önemli olan bayrağı kontrol etmek gibi görünüyor (resme bakın).-recursive

Ayrıca -no-parentbayrak önemli olduğunu buldum , othewise her şeyi indirmeye çalışacağız.

resim açıklamasını buraya girin resim açıklamasını buraya girin


2
Bunu buldum - Aralık 2017. İyi çalışıyor. Sourceforge.net/projects/visualwget
SDsolar 9:07

2
Windows makinede iyi çalıştı, cevapta belirtilen seçenekleri kontrol etmeyi unutmayın, aksi takdirde işe yaramaz
csharpcoder

Belirli https ile çalışmaz. @DaveLucre, cmd çözümünde wget ile denediyseniz de indirebilirsiniz, ancak bazı severs sanırım izin vermez
Yannis Dran

kontrol edilen ne yapar --no-parent?
T.Todua

1
Mart 2020'de çalışıyor!
Bay Programcı

7
wget -r -np -nH --cut-dirs=3 -R index.html http://hostname/aaa/bbb/ccc/ddd/

itibaren man wget

'-r' '--recursive' Özyinelemeli almayı açar. Daha fazla bilgi için Yinelemeli İndirme bölümüne bakın. Varsayılan maksimum derinlik 5'tir.

'-np' '--no-parent' Özyinelemeli olarak alırken hiçbir zaman üst dizine yükselme. Bu, yalnızca belirli bir hiyerarşinin altındaki dosyaların indirileceğini garanti ettiği için yararlı bir seçenektir. Daha fazla ayrıntı için Dizin Tabanlı Sınırlar'a bakın.

'-nH' '--no-host-directories' Barındırıcı tarafından önceden eklenmiş dizinlerin oluşturulmasını devre dışı bırakır . Varsayılan olarak, Wget'i '-r http://fly.srk.fer.hr/ ' ile çağırmak, fly.srk.fer.hr/ ile başlayan bir dizin yapısı oluşturur. Bu seçenek bu davranışı devre dışı bırakır.

'--cut-dirs = number' Sayı dizini bileşenlerini yoksay. Bu, özyinelemeli kurtarmanın kaydedileceği dizin üzerinde ayrıntılı bir denetim elde etmek için kullanışlıdır.

Örneğin, ' ftp://ftp.xemacs.org/pub/xemacs/ ' adresindeki dizini ele alalım . '-R' ile alırsanız, yerel olarak ftp.xemacs.org/pub/xemacs/ altına kaydedilir. '-NH' seçeneği ftp.xemacs.org/ parçasını kaldırabilse de, pub / xemacs ile hala sıkışıp kalırsınız. '--Cut-dirs' bu noktada işe yarar; Wget'in uzak dizin bileşenlerini “görmemesi” olmasını sağlar. '--Cut-dirs' seçeneğinin nasıl çalıştığına dair birkaç örnek.

Seçenek yok -> ftp.xemacs.org/pub/xemacs/ -nH -> pub / xemacs / -nH --cut-dirs = 1 -> xemacs / -nH --cut-dirs = 2 ->.

--cut-dirs = 1 -> ftp.xemacs.org/xemacs/ ... Sadece dizin yapısından kurtulmak istiyorsanız, bu seçenek '-nd' ve '-P' kombinasyonuna benzer. Bununla birlikte, '-nd' öğesinin aksine, --cut-dirs 'alt dizinlerle kaybolmaz - örneğin,' -nH --cut-dirs = 1 'ile xemacs / beta dizinine bir beta / alt dizin yerleştirilir. beklenir.


3
Bazı açıklamalar harika olurdu.
Benoît Latinier

Ne indirmekle ilgili belirli dosya türünü kullanarak VisualWget ? VisualWget'te yalnızca bir dizindeki mp3 dosyalarını ve alt dizinlerini indirmek mümkün müdür ?
Jason

3

wgetpaha biçilmez bir kaynak ve kendimi kullandığım bir şey. Ancak bazen adreste wgetsözdizimi hataları olarak tanımlanan karakterler vardır . Bunun için bir düzeltme olduğundan eminim, ancak bu soru özellikle hakkında wgetsormadığı için, şüphesiz bu sayfada öğrenme eğrisi gerekmeden hızlı bir düzeltme arayanlar için bir alternatif sunacağımı düşündüm.

Bunu yapabilen birkaç tarayıcı uzantısı vardır, ancak çoğu her zaman ücretsiz olmayan, göze çarpan bir eğilim olan ve çok fazla kaynak kullanan indirme yöneticilerini yüklemeyi gerektirir. Bu dezavantajlara sahip olmayan bir tane var:

"Download Master", Google Chrome için dizinlerden indirmek için harika bir uzantıdır. Hangi dosya türlerinin indirileceğini filtrelemeyi veya dizinin tamamını indirmeyi seçebilirsiniz.

https://chrome.google.com/webstore/detail/download-master/dljdacfojgikogldjffnkdcielnklkce

Güncel bir özellik listesi ve diğer bilgiler için geliştiricinin blog'undaki proje sayfasını ziyaret edin:

http://monadownloadmaster.blogspot.com/


3

Eğer --use-pget-n=10komuta ekleyebilirsiniz büyük dosyalar varsa lftp, indirme swish ordu bıçağı kullanabilirsiniz

lftp -c 'mirror --parallel=100 https://example.com/files/ ;exit'

mükemmel ve gerçekten hızlı çalıştı, bu binlerce küçük dosya indirerek internet hattımı maksimize etti. Çok iyi.
n13

mükemmel çalışıyor !! en iyi seçenek!
ambigus9


2

Yazılım veya Eklenti gerekmez!

(yalnızca özyinelemeli bölüme ihtiyacınız yoksa kullanılabilir)

Yer işareti kullanın. Bu bağlantıyı yer işaretlerine sürükleyin , ardından bu kodu düzenleyip yapıştırın:

(function(){ var arr=[], l=document.links; var ext=prompt("select extension for download (all links containing that, will be downloaded.", ".mp3"); for(var i=0; i<l.length; i++) { if(l[i].href.indexOf(ext) !== false){ l[i].setAttribute("download",l[i].text); l[i].click(); } } })();

sayfasına gidin (dosyaları indirmek istediğiniz yerden) ve bu yer işaretini tıklayın.


-1

wget genellikle bu şekilde çalışır, ancak bazı sitelerde sorunlar olabilir ve çok fazla gereksiz html dosyası oluşturabilir. Bu işi kolaylaştırmak ve gereksiz dosya oluşturmayı önlemek için, kendim için yazdığım ilk linux betiği olan getwebfolder betiğimi paylaşıyorum. Bu komut dosyası, parametre olarak girilen bir web klasörünün tüm içeriğini indirir.

Birden fazla dosya içeren wget ile açık bir web klasörü indirmeye çalıştığınızda, wget index.html adlı bir dosyayı indirir. Bu dosya web klasörünün bir dosya listesini içerir. Betiğim index.html dosyasında yazılan dosya adlarını web adreslerine dönüştürür ve wget ile net bir şekilde indirir.

Ubuntu 18.04 ve Kali Linux'ta test edildi, diğer dağıtımlarda da çalışabilir.

Kullanımı:

  • aşağıda sağlanan zip dosyasından getwebfolder dosyasını ayıklayın

  • chmod +x getwebfolder (sadece ilk kez)

  • ./getwebfolder webfolder_URL

gibi ./getwebfolder http://example.com/example_folder/

İndirme: {link

Blog'daki ayrıntılar

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.