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?

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)


+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

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.


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+\]$"
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.