Wget мовчить, але відображає повідомлення про помилки


11

Я хочу завантажити файл з Wget , але відповідно до звичайної філософії UNIX, я не хочу, щоб він виводив нічого, якщо завантаження вдалося. Однак якщо завантаження не вдалося, я хочу отримати повідомлення про помилку.

Ця -qопція пригнічує всі результати, включаючи повідомлення про помилки. Якщо я -nvзамість цього включу опцію, Wget все ще друкує (на stderr):

2012-05-03 16:17:05 URL:http://example.net/ [2966] -> "index.html" [1]

Як я можу видалити навіть цей вихід, але все ж отримувати повідомлення про помилки?

Відповіді:


5

Спробуйте curlзамість цього:

curl -fsS $url -o $file

Довга версія:

curl --fail --silent --show-error $url --output $file

Користувачі GNOME можуть спробувати Gvfs:

gvfs-cp $url $file

1
На жаль, curl не встановлено на всіх системах debian.
фігаг

чому додавання --fail? чи не було б сенсу трактувати помилки HTTP як щось, що ви хочете перейти до stderr?
gilad mayani

Саме це поєднання --failі --show-errorробить.
користувач1686

4

Lame hack, якщо ви не можете отримати кращої відповіді:

wget {url} 2>/tmp/err.log || cat /tmp/err.log; rm /tmp/err.log

(2> /tmp/err.log перенаправляє stderr у файл tmp; якщо wget поверне 0 [успіх], || коротке замикання в іншому випадку виведе друк значень журналу помилок)


+1 Я пропустив, що весь вихід буде жорсткішим; Я видалив свою відповідь про переадресацію stdout до / dev / null.
чепнер

5
Це працює, але це кульгаво . error_log=$(wget -nv example.net 2>&1) || echo $error_logє більш елегантним рішенням, але все ж незграбним.
фігаг

1

Оскільки в даний час весь вихід wget іде більш жорстким, здається, що для вирішення цього "елегантного способу" вам доведеться виправити джерело wget.

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

Існує відкрита помилка щодо цього http://savannah.gnu.org/bugs/?33839 , а також деякі старі дискусії. Ось запропонований патч http://www.mail-archive.com/wget%40sunsite.dk/msg03289.html, і ось відповідь Хрвіо Нікшича про цю http://www.mail-archive.com/wget % 40sunsite.dk / msg03330.html .

Крім цього, звичайно, є хороше рішення, яке ви запропонували в коментарі до менш елегантного рішення Foon.


0

Ви також можете подати вихід grepі відфільтрувати повідомлення про успіх.

Це має працювати:

wget ... -nv 2>&1 | grep -Pv "^\d\d\d\d-\d\d-\d\d \d\d:\d\d:\d\d URL:.*\[\d+\] -> ".*" \[\d+\]$"
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.