ข้ามดาวน์โหลดหากไฟล์มีอยู่ใน wget?


คำตอบ:


273

ลองพารามิเตอร์ต่อไปนี้:

-nc, --no-clobber: ข้ามการดาวน์โหลดที่จะดาวน์โหลดไปยังไฟล์ที่มีอยู่

ตัวอย่างการใช้งาน:

wget -nc http://example.com/pic.png

35
-ncไม่ป้องกันการส่งคำขอ HTTP และการดาวน์โหลดไฟล์ในภายหลัง มันไม่ได้ทำอะไรหลังจากดาวน์โหลดไฟล์หากไฟล์นั้นได้รับการดึงข้อมูลเรียบร้อยแล้ว มีวิธีป้องกันการร้องขอ HTTP หรือไม่หากไฟล์มีอยู่แล้ว? stackoverflow.com/questions/33203898/…
ma11hew28

8
ตามที่ระบุไว้ในคำถามที่เชื่อมโยงกันฉันไม่เห็นด้วย - หากไม่มีการอุดตันและมีการใช้ชื่อไฟล์อยู่ ไม่มีการร้องขอ HEAD แม้ว่าจะไม่ใช่กรณีนี้ให้ตรวจสอบว่าคุณมีไฟล์ที่จะเริ่มต้นด้วย :-) หรือไม่[ ! -e "$(basename $URL)" ] && wget $URL
plundra

3
ฉันคิดว่าฉันอาจได้รับผลลัพธ์ที่แตกต่างกันเพราะฉันใช้--recursiveตัวเลือก
ma11hew28

200

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

wget -N http://www.example.com/images/misc/pic.png

จากนั้นวิ่ง Wget กับ -N มีหรือไม่มี-rหรือ-pการตัดสินใจที่เป็นไปได้หรือไม่ที่จะดาวน์โหลดสำเนาของไฟล์ใหม่ขึ้นอยู่กับการประทับเวลาท้องถิ่นและระยะไกลและขนาดของไฟล์ อาจจะไม่ได้ระบุไว้ในเวลาเดียวกันเป็น-nc-N

-N, --timestamping: เปิดการประทับเวลา


39
เมื่อเซิร์ฟเวอร์ไม่ได้รับการกำหนดค่าอย่างถูกต้อง-Nอาจล้มเหลวและ wget จะทำการดาวน์โหลดซ้ำเสมอ ดังนั้นบางครั้งก็-ncเป็นทางออกที่ดีกว่า
ผู้ใช้

2
สิ่งที่อาจเป็นสถานการณ์ที่เกี่ยวข้องที่ 'เมื่อเซิร์ฟเวอร์ไม่ได้กำหนดค่าอย่างถูกต้อง' จะเกิดขึ้น?
AjayKumarBasuthkar

เมื่อคุณดาวน์โหลดจากสถานที่ที่ถูกคัดลอกให้เปลี่ยนการประทับเวลาทั้งหมด
Robert

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

2
@AjayKumarBasuthkar: เมื่อเซิร์ฟเวอร์ไม่สนับสนุนวิธีการตรวจสอบไฟล์ใหม่ใด ๆwgetจะบ่นLast-modified header missing; นี่เป็นสถานการณ์ที่สรุปไว้อย่างแน่นอน
Piskvor ออกจากอาคาร

23

เมื่อใช้ Wget ด้วย-rหรือ-pแต่ไม่-N, -ndหรือ-ncอีกครั้งดาวน์โหลดไฟล์จะส่งผลในสำเนาใหม่เพียงเขียนทับเก่า

ดังนั้นการเพิ่ม-ncจะป้องกันพฤติกรรมนี้แทนที่จะทำให้เวอร์ชันดั้งเดิมถูกเก็บรักษาไว้และการทำสำเนาที่ใหม่กว่าบนเซิร์ฟเวอร์จะถูกละเว้น

ดูข้อมูลเพิ่มเติมได้ที่ GNU


18

คำตอบที่ผมกำลังมองหาที่https://unix.stackexchange.com/a/9557/114862

การใช้-cแฟล็กเมื่อไฟล์โลคัลมีขนาดใหญ่กว่าหรือเท่ากับรุ่นของเซิร์ฟเวอร์จะหลีกเลี่ยงการดาวน์โหลดซ้ำ


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