wget -o เขียนไฟล์ว่างเปล่าเมื่อล้มเหลว


14

ถ้าฉันเขียน wget "ไม่มีที่อยู่ดังกล่าว" -o "test.html" ก่อนอื่นจะสร้าง test.html และในกรณีที่ล้มเหลวให้ปล่อยว่างไว้ อย่างไรก็ตามเมื่อไม่ได้ใช้ -o มันจะรอดูว่าการดาวน์โหลดสำเร็จหรือไม่หลังจากนั้นไฟล์ดังกล่าวจะเขียนไฟล์

ฉันต้องการให้มีการนำพฤติกรรมหลังไปใช้กับ -o ด้วยเช่นกันหรือไม่

คำตอบ:


17

wget ส่งคืนสถานะการออกที่ไม่เป็นศูนย์เมื่อไม่พบ URL ดังนั้นคุณสามารถผนวกคำสั่งลบเมื่อล้มเหลว:

wget "url" -O file || rm -f file

หรือสร้างไฟล์ชั่วคราวและย้ายเฉพาะที่ที่คุณต้องการเพื่อความสำเร็จ:

wget "url" -O /tmp/wget && mv /tmp/wget file

ข้อที่สองมีประโยชน์ในการไม่ลบไฟล์ที่มีอยู่เมื่อเกิดความล้มเหลว แต่ต้องแน่ใจว่าใช้ชื่อชั่วคราวที่ไม่ซ้ำกัน (ดูman tempfile) หากคุณใช้หลายอินสแตนซ์พร้อมกัน


นอกจากนี้การเพิ่ม--retry-connrefusedสามารถช่วยในการป้องกันไฟล์ว่างได้ตั้งแต่แรก
akom

หากสิ่งนี้เกิดขึ้นในผู้บริหารในรายการหุ่นเชิดการเปลี่ยนสร้างไฟล์ =>เป็นเว้นแต่ => "[ไฟล์ -s]"สามารถทำให้หายเองได้
akom

13

ดังที่เขียนไว้ในความคิดเห็นwget -O เป็นเหมือนการเปลี่ยนเส้นทางของเชลล์ที่มักจะเขียนลงในไฟล์โดยไม่คำนึงถึงข้อผิดพลาด

คุณสามารถใช้curl -fแทน:

curl -f http://nonexistent/file.jpg -o localfile.jpg

มันจะไม่แตะไฟล์โลคอลหากมีข้อผิดพลาดในการดึงไฟล์


4

ไวยากรณ์ที่ถูกต้องคือ

wget "url" -O file

สังเกตุ UPPERCASE O. ตัวเลือก -o บอกให้ wget เขียนไฟล์บันทึกนั่นคือสาเหตุที่มันถูกเขียนเสมอแม้ล้มเหลว


ตอนแรกฉันคิดว่ามันใช้งานได้ แต่แล้วฉันก็พบว่ามันไม่ได้ ลอง wget " host.does.not.exist " -O "emptyFile" มีข้อผิดพลาดถูกส่งคืน แต่ emptyFile ถูกสร้างขึ้น
akurtser

1
@ akurtser คุณพูดถูก ฉันคิดว่าไม่มีทางที่จะบอกได้ว่าอย่าสร้างไฟล์ ฉันพบกระทู้นี้: mail-archive.com/wget@sunsite.dk/msg08586.htmlที่พวกเขาพูดคุยเรื่องนี้ พื้นฐานคือคุณสามารถดาวน์โหลดได้หลายไฟล์ในไฟล์เดียวกันดังนั้นมันจึงถูกสร้างขึ้นเพราะ wget ไม่สามารถกำหนดได้ว่า URL ทั้งหมดจะล้มเหลว
Mr Shunz

ขอบคุณเป็นส่วนหนึ่งของสคริปต์ทุบตีที่ฉันเขียนดังนั้นฉันจะพยายามบันทึกไฟล์ชั่วคราวก่อนซึ่งในกรณีที่การดาวน์โหลดสำเร็จจะถูกเปลี่ยนชื่อ ไม่หรูหรามาก แต่ไม่สามารถคิดอะไรได้ดีไปกว่านี้
akurtser

1
@akurtser แน่นอนคุณสามารถตรวจสอบรหัสส่งคืนจาก wget แล้ว ... มันควรจะบอกคุณว่าคุณสามารถลบไฟล์ "ถ้าไม่พบ" ดังนั้นไม่จำเป็นต้องใช้ temp / renaming
Mr Shunz

1
ตัวเลือก -O คือการเปลี่ยนเส้นทางซึ่งเปลี่ยนเส้นทางเนื้อหาที่ดาวน์โหลดไปยังไฟล์แม้ในกรณีที่ไม่มีเนื้อหา ดังนั้นไฟล์จะถูกสร้างขึ้นเสมอแม้ว่าการดาวน์โหลดจะล้มเหลว
Quan ถึง

0

ตามเอกสารช่วยเหลือ (wget -h) คุณสามารถใช้ตัวเลือก - สไปเดอร์เพื่อข้ามดาวน์โหลด (เวอร์ชั่น 1.14)

Download:
  -S,  --server-response         print server response.
       --spider                  don't download anything.

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