Як я можу обмежити розмір завантаженого файлу в wget?


13

Я хочу використовувати wget(із сценарію PHP) для завантаження графічних файлів, але не хочу завантажувати файли певного розміру.

Чи можна обмежити розмір файлу за допомогою wget? Якщо ні, то який кращий спосіб?

Відповіді:


14

Якщо ви розробляєте сценарії завантажень, вам варто скористатися curlнатомість. Wget може аналізувати вихід і рекурсивно отримувати цілі сайти, але curl має більше варіантів, що стосуються фактичного завантаження певного файлу. Ось відповідний варіант на сторінці man:

--max-filesize
Вкажіть максимальний розмір (у байтах) файлу для завантаження. Якщо запитуваний файл перевищує це значення, передача не почнеться і згортання повернеться з кодом виходу 63.
ПРИМІТКА. Розмір файлу не завжди відомий перед завантаженням, і для таких файлів ця опція не впливає, навіть якщо файл передача в кінцевому підсумку перевищує цю задану межу.

Примітка про це лише для роботи з деякими файлами варто розглянути. Клієнт залежить від сервера, щоб повідомити, наскільки великим буде файл, перш ніж він розпочне завантаження. Більшість, але точно не всі сервери повідомляють про це.


6
Ви можете поєднати це з обмеженням системи , щоб заборонити локон від створення файлу більше , ніж $nбайти: (ulimit -f $(($n/512)); curl --max-filesize $n …). curlприпинить помилку, якщо розмір файлу перевищить $n/512512-байтові блоки.
Жил 'ТАК - перестань бути злим'

Ви також можете httrack.
Ві.

6

Якщо ви хочете використовувати wget, ось спосіб перевірити розмір файлу без завантаження:

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

де, $URLзвичайно, URL-адреса файлу, який ви хочете завантажити.

Таким чином, ви можете обумовити свій сценарій на основі результатів. як от:

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

для обмеження розміру завантаження до 20 Мб.

(код некрасивий, лише в інформаційних цілях).


1

Здається, не існує жодного розумного способу встановити максимальний розмір файлу за допомогою wget.


2
Підхід Жиля з ulimit(див bash(1), setrlimit(2)) буде також працювати з wget(1), хоча це трохи великоваговим.
sarnold

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.