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 ไม่ได้ติดตั้งไว้ล่วงหน้าในระบบเดเบียนทั้งหมด
Phihag

ทำไมต้องเพิ่ม--fail? จะไม่เหมาะสมที่จะจัดการกับข้อผิดพลาด HTTP เป็นสิ่งที่คุณต้องการไปยัง stderr หรือไม่
gilad mayani

นั่นคือสิ่งที่การรวมกันของ--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 [สำเร็จ] วงจรสั้น || มิฉะนั้นจะพิมพ์ค่าบันทึกข้อผิดพลาด)


+1 ฉันพลาดว่าเอาต์พุตทั้งหมดกำลังจะไปถึง stderr; ฉันได้ลบคำตอบของฉันเพียงแค่เปลี่ยนเส้นทาง stdout ไปที่ / dev / null
chepner

5
ที่ทำงาน แต่มันง่อย error_log=$(wget -nv example.net 2>&1) || echo $error_logเป็นทางออกที่สง่างามกว่า แต่ก็ยังเงอะงะ
Phihag

1

เนื่องจากปัจจุบัน wget เอาต์พุตทั้งหมดไปที่ stderr ดูเหมือนว่าการแก้ปัญหานี้ 'วิธีที่ยอดเยี่ยม' คุณจะต้องแก้ไขแหล่งที่มาของ wget

การออกแบบแหล่งที่มากำหนดความแตกต่างระดับ verbosity ระหว่างข้อความแทนที่จะแยกง่ายระหว่างข้อผิดพลาดและไม่ใช่ข้อความผิดพลาด

มีข้อผิดพลาดแบบเปิดเกี่ยวกับhttp://savannah.gnu.org/bugs/?33839นี้และยังมีการอภิปรายที่เก่ากว่า นี่คือแพทช์ที่แนะนำhttp://www.mail-archive.com/wget%40sunsite.dk/msg03289.htmlและที่นี่มีคำตอบจาก Hrvoje Niksic เกี่ยวกับhttp://www.mail-archive.com/wget %

นอกจากนั้นยังมีทางออกที่ดีที่คุณเสนอในความคิดเห็นต่อโซลูชันที่หรูหราน้อยกว่าของ Foon


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+\]$"
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.