Bagaimana saya bisa membatasi ukuran file yang diunduh di wget?

13

Saya ingin menggunakan wget(dari skrip php) untuk mengunduh file gambar, tetapi tidak ingin mengunduh file dengan ukuran tertentu.

Bisakah saya membatasi ukuran file wget? Jika tidak, apa cara yang lebih baik?

T. Brian Jones
sumber

Jawaban:

14

Jika Anda membuat skrip unduhan, Anda harus mempertimbangkan untuk menggunakannya curl. Wget dapat mem-parsing output dan secara rekursif mengambil seluruh situs, tetapi curl memiliki lebih banyak opsi terkait dengan pengunduhan aktual file tertentu. Berikut adalah opsi yang relevan di halaman manual:

--max-filesize
Menentukan ukuran maksimum (dalam byte) file yang akan diunduh. Jika file yang diminta lebih besar dari nilai ini, transfer tidak akan dimulai dan curl akan kembali dengan kode keluar 63.
CATATAN: Ukuran file tidak selalu diketahui sebelum diunduh, dan untuk file seperti ini opsi ini tidak berpengaruh walaupun file tersebut Transfer akhirnya menjadi lebih besar dari batas yang diberikan ini.

Catatan tentang ini hanya berfungsi untuk beberapa file yang patut dipertimbangkan. Klien bergantung pada server untuk melaporkan seberapa besar file tersebut sebelum mulai mengunduh. Sebagian besar tapi tentu saja tidak semua server melaporkan hal ini.

Caleb
sumber
6
Anda dapat menggabungkan ini dengan batas sistem untuk melarang keriting dari menciptakan sebuah file yang lebih besar dari $nbyte: (ulimit -f $(($n/512)); curl --max-filesize $n …). curlakan dibatalkan dengan kesalahan jika ukuran file melebihi $n/512blok 512-byte.
Gilles 'SO- stop being evil'
Anda juga bisa httrack.
Vi.
6

Jika Anda ingin menggunakan wget, berikut adalah cara untuk menguji ukuran file tanpa mengunduh:

wget --spider $URL 2>&1 | awk '/Length/ {print $2}'

dimana $URL URL file yang ingin Anda unduh, tentu saja.

Jadi, Anda dapat mengkondisikan skrip Anda berdasarkan output. seperti:

{ [ $(wget --spider $URL 2>&1 | awk '/Length/ {print $2}') -lt 20971520 ] && wget $URL; } || echo file to big

untuk membatasi ukuran unduhan hingga 20 MB.

(kode ini jelek, hanya untuk tujuan informasi).

Philomath
sumber
1

Tampaknya tidak ada cara yang masuk akal untuk mengatur ukuran file maksimal dengan wget.

T. Brian Jones
sumber
2
Pendekatan Gilles dengan ulimit(lihat bash(1), setrlimit(2)) juga akan berhasil wget(1), meskipun agak berat.
sarnold