Bagaimana cara mengunduh direktori HTTP dengan semua file dan sub-direktori ketika muncul pada daftar file / folder online?

189

Ada direktori HTTP online yang dapat saya akses. Saya telah mencoba mengunduh semua sub-direktori dan file melalui wget. Tetapi, masalahnya adalah bahwa ketika wgetmengunduh sub-direktori itu mengunduh index.htmlfile yang berisi daftar file dalam direktori itu tanpa mengunduh file itu sendiri.

Apakah ada cara untuk mengunduh sub-direktori dan file tanpa batas kedalaman (seolah-olah direktori yang ingin saya unduh hanyalah folder yang ingin saya salin ke komputer saya).

direktori HTTP online

Omar
sumber

Jawaban:

357

Larutan:

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

Penjelasan:

  • Ini akan mengunduh semua file dan subfolder di direktori ddd
  • -r : secara rekursif
  • -np: tidak pergi ke direktori atas, seperti ccc / ...
  • -nH : tidak menyimpan file ke folder hostname
  • --cut-dirs=3: tetapi menyimpannya ke ddd dengan menghilangkan 3 folder pertama aaa , bbb , ccc
  • -R index.html: tidak termasuk file index.html

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

Mingjiang Shi
sumber
17
Terima kasih! Juga, menurut FYI ini Anda dapat menggunakan -Rsuka -R cssmengecualikan semua file CSS, atau menggunakan -Asuka -A pdfhanya mengunduh file PDF.
John
7
Terima kasih! Saran tambahan diambil dari halaman manual wget 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
Saya mendapatkan kesalahan ini 'wget' tidak dikenali sebagai perintah internal atau eksternal, program yang dapat dijalankan atau file batch.
hamish
1
@hamish Anda mungkin perlu menginstal wget terlebih dahulu atau wget tidak dalam $ PATH Anda.
Mingjiang Shi
16
Jawaban bagus, tetapi perhatikan bahwa jika ada robots.txtfile yang tidak mengizinkan pengunduhan file dalam direktori, ini tidak akan berfungsi. Dalam hal ini Anda perlu menambahkan -e robots=off . Lihat unix.stackexchange.com/a/252564/10312
Daniel Hershcovich
45

Saya bisa mendapatkan ini berfungsi berkat posting ini menggunakan VisualWGet . Ini bekerja sangat baik untuk saya. Bagian yang penting adalah memeriksa -recursivebendera (lihat gambar).

Ditemukan juga bahwa -no-parentflag itu penting, dan itu juga akan mencoba mengunduh semuanya.

masukkan deskripsi gambar di sini masukkan deskripsi gambar di sini

mateuscb
sumber
2
Baru menemukan ini - Des 2017. Ini berfungsi dengan baik. Saya mendapatkannya di sourceforge.net/projects/visualwget
SDsolar
2
Bekerja dengan baik pada mesin Windows, jangan lupa untuk memeriksa opsi yang disebutkan dalam jawaban, kalau tidak, tidak akan berhasil
csharpcoder
Tidak berfungsi dengan https tertentu. @ DaveLucre jika Anda mencoba dengan wget dalam solusi cmd Anda akan dapat mengunduh juga, tetapi beberapa pengungkit tidak mengijinkannya saya kira
Yannis Dran
apa yang diperiksa --no-parentlakukan?
T.Todua
1
Bekerja pada Maret 2020!
Mr Programmer
7
wget -r -np -nH --cut-dirs=3 -R index.html http://hostname/aaa/bbb/ccc/ddd/

Dari man wget

'-r' '--recursive' Nyalakan pengambilan rekursif. Lihat Unduhan Rekursif, untuk lebih jelasnya. Kedalaman maksimum default adalah 5.

'-np' '--no-parent' Jangan pernah naik ke direktori induk ketika mengambil secara rekursif. Ini adalah opsi yang berguna, karena menjamin bahwa hanya file di bawah hierarki tertentu yang akan diunduh. Lihat Batas Berbasis Direktori, untuk lebih jelasnya.

'-nH' '--no-host-directories' Menonaktifkan pembuatan direktori yang diawali dengan host. Secara default, menjalankan Wget dengan '-r http://fly.srk.fer.hr/ ' akan membuat struktur direktori yang dimulai dengan fly.srk.fer.hr/. Opsi ini menonaktifkan perilaku tersebut.

'--cut-dirs = number' Abaikan komponen direktori angka. Ini berguna untuk mendapatkan kontrol yang baik atas direktori tempat pengambilan rekursif akan disimpan.

Ambil, misalnya, direktori di ' ftp://ftp.xemacs.org/pub/xemacs/ '. Jika Anda mengambilnya dengan '-r', itu akan disimpan secara lokal di bawah ftp.xemacs.org/pub/xemacs/. Sementara opsi '-nH' dapat menghapus bagian ftp.xemacs.org/, Anda masih terjebak dengan pub / xemacs. Di sinilah '--cut-dirs' berguna; itu membuat Wget tidak "melihat" nomor komponen direktori jarak jauh. Berikut adalah beberapa contoh cara kerja opsi '--cut-dirs'.

Tidak ada pilihan -> ftp.xemacs.org/pub/xemacs/ -nH -> pub / xemacs / -nH --cut-dirs = 1 -> xemacs / -nH --cut-dirs = 2 ->.

--cut-dirs = 1 -> ftp.xemacs.org/xemacs/ ... Jika Anda hanya ingin menyingkirkan struktur direktori, opsi ini mirip dengan kombinasi '-nd' dan '-P'. Namun, tidak seperti '-nd', '--cut-dirs' tidak kalah dengan subdirektori — misalnya, dengan '-nH --cut-dirs = 1', beta / subdirektori akan ditempatkan ke xemacs / beta, karena orang akan berharap.

Natalie Ng
sumber
3
Beberapa penjelasan akan sangat bagus.
Benoit Latinier
Bagaimana dengan mengunduh jenis file tertentu menggunakan VisualWget ? Apakah mungkin untuk mengunduh hanya file mp3 dalam direktori dan sub-direktori di VisualWget ?
Jason
3

wgetadalah sumber daya yang tak ternilai dan sesuatu yang saya gunakan sendiri. Namun terkadang ada karakter dalam alamat yang wgetmengidentifikasi kesalahan sintaksis. Saya yakin ada perbaikan untuk itu, tetapi karena pertanyaan ini tidak menanyakan secara spesifik tentang wgetsaya pikir saya akan menawarkan alternatif bagi orang-orang yang pasti akan tersandung pada halaman ini mencari perbaikan cepat tanpa perlu kurva belajar.

Ada beberapa ekstensi peramban yang dapat melakukan ini, tetapi sebagian besar memerlukan pemasangan pengelola unduhan, yang tidak selalu gratis, cenderung merusak pemandangan, dan menggunakan banyak sumber daya. Inilah salah satu yang tidak memiliki kekurangan ini:

"Unduh Master" adalah ekstensi untuk Google Chrome yang berfungsi bagus untuk mengunduh dari direktori. Anda dapat memilih untuk memfilter jenis file mana yang akan diunduh, atau mengunduh seluruh direktori.

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

Untuk daftar fitur terbaru dan informasi lainnya, kunjungi halaman proyek di blog pengembang:

http://monadownloadmaster.blogspot.com/

Moscarda
sumber
3

Anda dapat menggunakan lftp, pisau unduh pasukan swish jika Anda memiliki file yang lebih besar yang dapat Anda tambahkan --use-pget-n=10ke perintah

lftp -c 'mirror --parallel=100 https://example.com/files/ ;exit'
nwgat
sumber
bekerja dengan sempurna dan sangat cepat, ini memaksimalkan jalur internet saya mengunduh ribuan file kecil. Baik sekali.
n13
bekerja dengan sempurna !! pilihan terbaik!
ambigus9
2

Tidak ada Perangkat Lunak atau Plugin yang diperlukan!

(hanya dapat digunakan jika Anda tidak perlu deptch rekursif)

Gunakan bookmarklet. Seret tautan ini di bookmark, lalu edit dan tempel kode ini:

(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(); } } })();

dan buka halaman (dari mana Anda ingin mengunduh file), dan klik bookmarklet itu.

T.Todua
sumber
-1

wget umumnya bekerja dengan cara ini, tetapi beberapa situs mungkin memiliki masalah dan mungkin membuat terlalu banyak file html yang tidak perlu. Untuk membuat pekerjaan ini lebih mudah dan untuk mencegah pembuatan file yang tidak perlu, saya membagikan skrip getwebfolder saya, yang merupakan skrip linux pertama yang saya tulis untuk diri saya sendiri. Skrip ini mengunduh semua konten folder web yang dimasukkan sebagai parameter.

Ketika Anda mencoba mengunduh folder web terbuka oleh wget yang berisi lebih dari satu file, wget mengunduh file bernama index.html. File ini berisi daftar file folder web. Skrip saya mengonversi nama file yang ditulis dalam file index.html ke alamat web dan mengunduhnya dengan jelas dengan wget.

Diuji di Ubuntu 18.04 dan Kali Linux, Ini dapat bekerja di distro lain juga.

Penggunaan:

  • ekstrak file getwebfolder dari file zip yang disediakan di bawah ini

  • chmod +x getwebfolder (hanya untuk pertama kali)

  • ./getwebfolder webfolder_URL

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

Unduh Tautan

Detail di blog

Byte Bitter
sumber