Я хочу використовувати wget
(із сценарію PHP) для завантаження графічних файлів, але не хочу завантажувати файли певного розміру.
Чи можна обмежити розмір файлу за допомогою wget
? Якщо ні, то який кращий спосіб?
Я хочу використовувати wget
(із сценарію PHP) для завантаження графічних файлів, але не хочу завантажувати файли певного розміру.
Чи можна обмежити розмір файлу за допомогою wget
? Якщо ні, то який кращий спосіб?
Відповіді:
Якщо ви розробляєте сценарії завантажень, вам варто скористатися curl
натомість. Wget може аналізувати вихід і рекурсивно отримувати цілі сайти, але curl має більше варіантів, що стосуються фактичного завантаження певного файлу. Ось відповідний варіант на сторінці man:
--max-filesize
Вкажіть максимальний розмір (у байтах) файлу для завантаження. Якщо запитуваний файл перевищує це значення, передача не почнеться і згортання повернеться з кодом виходу 63.
ПРИМІТКА. Розмір файлу не завжди відомий перед завантаженням, і для таких файлів ця опція не впливає, навіть якщо файл передача в кінцевому підсумку перевищує цю задану межу.
Примітка про це лише для роботи з деякими файлами варто розглянути. Клієнт залежить від сервера, щоб повідомити, наскільки великим буде файл, перш ніж він розпочне завантаження. Більшість, але точно не всі сервери повідомляють про це.
Якщо ви хочете використовувати 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 Мб.
(код некрасивий, лише в інформаційних цілях).
Здається, не існує жодного розумного способу встановити максимальний розмір файлу за допомогою wget.
ulimit
(див bash(1)
, setrlimit(2)
) буде також працювати з wget(1)
, хоча це трохи великоваговим.
wget має -Q
--quota
опцію, яка обмежує максимальну кількість завантажень, коли вказано кілька URL-адрес (рекурсивний або вхідний список).
https://www.gnu.org/software/wget/manual/html_node/Download-Options.html
$n
байти:(ulimit -f $(($n/512)); curl --max-filesize $n …)
.curl
припинить помилку, якщо розмір файлу перевищить$n/512
512-байтові блоки.