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.
phihag

зачем добавлять --fail? разве не имеет смысла рассматривать ошибки HTTP как то, что вы хотели бы использовать в stderr?
Гилад Майани

Именно это --failи --show-errorделает комбинация .
user1686

4

Хромой взлом, если вы не можете получить лучший ответ:

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

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


+1 Я пропустил, что весь вывод идет в stderr; Я удалил свой ответ, просто перенаправив стандартный вывод в / dev / null.
chepner

5
Это работает, но это отстой . error_log=$(wget -nv example.net 2>&1) || echo $error_logэто более элегантное решение, но все еще неуклюже.
phihag

1

Поскольку в настоящее время весь вывод wget идет в stderr, кажется, что для решения этого «элегантного способа» вам нужно будет исправить исходный код wget.

Исходный дизайн wget определяет разницу в уровне детализации между сообщениями, а не простое разделение между ошибками, а не сообщениями об ошибках.

Существует открытая ошибка об этом http://savannah.gnu.org/bugs/?33839 , а также некоторые старые обсуждения. Вот предложенный патч http://www.mail-archive.com/wget%40sunsite.dk/msg03289.html и здесь есть ответ от Hrvoje Niksic об этом http://www.mail-archive.com/wget % 40sunsite.dk / msg03330.html .

Помимо этого, есть, конечно, хорошее решение, которое вы предложили в комментарии к менее элегантному решению Фуна.


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.