Wget diam, tetapi menampilkan pesan kesalahan

10

Saya ingin mengunduh file dengan Wget , tetapi sesuai filosofi UNIX yang biasa, saya tidak ingin menghasilkan apa pun jika unduhan berhasil. Namun, jika unduhan gagal, saya ingin pesan kesalahan.

The -qpilihan menekan semua output, termasuk pesan error. Jika saya memasukkan -nvopsi sebagai gantinya, Wget masih mencetak (pada stderr):

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

Bagaimana saya bisa menghapus bahkan output itu, tetapi masih mendapatkan pesan kesalahan?

phihag
sumber

Jawaban:

4

Lame hack jika Anda tidak bisa mendapatkan jawaban yang lebih baik:

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

(The 2> /tmp/err.log mengarahkan stderr ke file tmp; jika wget mengembalikan 0 [sukses], sirkuit pendek || jika tidak maka akan mencetak nilai log kesalahan)

Foon
sumber
+1 Saya merindukan bahwa semua output akan stderr; Saya telah menghapus jawaban saya hanya dengan mengarahkan ulang stdout ke / dev / null.
chepner
5
Itu berhasil, tapi lumpuh . error_log=$(wget -nv example.net 2>&1) || echo $error_logadalah solusi yang lebih elegan, tetapi masih canggung.
phihag
4

Coba curlsaja:

curl -fsS $url -o $file

Versi panjang:

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

Pengguna GNOME dapat mencoba Gvfs:

gvfs-cp $url $file
pengguna1686
sumber
1
Sayangnya, curl tidak diinstal pada semua sistem debian.
phihag
mengapa menambahkan --fail? tidakkah masuk akal untuk memperlakukan kesalahan HTTP sebagai sesuatu yang ingin Anda tuju ke stderr?
gilad mayani
Itulah kombinasi --faildan --show-errorapa yang dilakukan.
user1686
1

Karena saat ini semua keluaran wget masuk ke stderr, tampaknya untuk menyelesaikan 'cara elegan' ini Anda harus menambal sumber wget.

wget source design mendikte perbedaan tingkat verbositas antara pesan, daripada pemisahan sederhana antara kesalahan dan bukan pesan kesalahan.

Ada bug terbuka tentang http://savannah.gnu.org/bugs/?33839 ini , dan ada juga beberapa diskusi yang lebih lama. Berikut adalah tambalan yang disarankan http://www.mail-archive.com/wget%40sunsite.dk/msg03289.html dan di sini ada jawaban dari Hrvoje Niksic tentang http://www.mail-archive.com/wget ini % 40sunsite.dk / msg03330.html .

Selain itu, tentu saja ada solusi bagus yang Anda usulkan dalam komentar untuk solusi Foon yang kurang elegan.

amotzg
sumber
0

Anda juga dapat menyalurkan output ke grepdan memfilter pesan sukses.

Ini seharusnya bekerja:

wget ... -nv 2>&1 | grep -Pv "^\d\d\d\d-\d\d-\d\d \d\d:\d\d:\d\d URL:.*\[\d+\] -> ".*" \[\d+\]$"
Dennis
sumber