Wget sessiz, ancak hata mesajları gösteriyor


11

Wget ile bir dosya indirmek istiyorum , ancak her zamanki UNIX felsefesine göre, indirme başarılı olursa hiçbir şey çıktısını istemiyorum . Ancak, indirme başarısız olursa, bir hata mesajı istiyorum.

Bu -qseçenek hata mesajları dahil tüm çıktıları bastırır. Ben eklerseniz -nvyerine seçeneği, Wget hala (standart hataya) yazdırır:

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

Bu çıktıyı bile nasıl kaldırabilirim, ancak yine de hata iletileri alabilirim?

Yanıtlar:


5

curlBunun yerine deneyin :

curl -fsS $url -o $file

Uzun versiyon:

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

GNOME kullanıcıları Gvfs'yi deneyebilir:

gvfs-cp $url $file

1
Ne yazık ki, curl tüm debian sistemlere önceden kurulmamıştır.
phihag

neden eklemeliyim --fail? HTTP hatalarına stderr'a gitmek istediğiniz bir şey gibi davranmak mantıklı olmaz mıydı?
gilad mayani

Yani ne kombinasyonu tam da --failve --show-erroryapar.
user1686

4

Daha iyi bir cevap alamazsanız topal kesmek:

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

(2> /tmp/err.log stderr dosyasını bir tmp dosyasına yönlendirir; wget 0 [başarılı] döndürürse, || kısa devreleri aksi halde hata günlüğü değerlerini yazdırır)


+1 Tüm çıktıların stderr'a gideceğini kaçırdım; Stdout'u / dev / null dizinine yeniden yönlendirme yanıtımı sildim.
chepner

5
İşe yarıyor, ama topal . error_log=$(wget -nv example.net 2>&1) || echo $error_logdaha zarif bir çözüm, ama yine de sakar.
phihag

1

Şu anda tüm wget çıktıları stderr'a gittiğinden, bu 'zarif yolu' çözmek için wget kaynağını yamalamak zorunda kalacaksınız.

wget kaynak tasarımı, hata ve hata mesajı arasında basit bir ayrım yerine mesajlar arasında ayrıntı düzeyi farkını belirler.

Bu http://savannah.gnu.org/bugs/?33839 hakkında açık bir hata var ve ayrıca bazı eski tartışmalar var. İşte önerilen bir yama http://www.mail-archive.com/wget%40sunsite.dk/msg03289.html ve burada Hrvoje Niksic'ten bu http://www.mail-archive.com/wget hakkında bir cevap var % 40 güneş sitesi.dk / msg03330.html .

Bunun dışında tabii ki Foon'un daha az zarif çözümüne yaptığı bir yorumda önerdiğiniz iyi bir çözüm var.


0

Çıktıyı grepbaşarı iletisine ayırabilir ve filtreleyebilirsiniz.

Bu çalışmalı:

wget ... -nv 2>&1 | grep -Pv "^\d\d\d\d-\d\d-\d\d \d\d:\d\d:\d\d URL:.*\[\d+\] -> ".*" \[\d+\]$"
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.