10

Я хочу загрузить файл с помощью Wget, но, согласно обычной философии UNIX, я не хочу, чтобы он что-либо выводил, если загрузка прошла успешно. Однако, если загрузка не удалась, я хочу сообщение об ошибке.

Опция -q подавляет все выходные данные, включая сообщения об ошибках. Если вместо этого я включу опцию -nv , Wget все еще печатает (на stderr):

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

Как я могу удалить даже этот вывод, но все равно получать сообщения об ошибках?

4 ответа4

4

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

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

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

4

Попробуйте вместо этого curl :

curl -fsS $url -o $file

Длинная версия:

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

Пользователи GNOME могут попробовать Gvfs:

gvfs-cp $url $file
1

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

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

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+\]$"

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .