ฉันกำลังสร้างสคริปต์ Bash แบบง่าย ๆ เพื่อแยกเวลา / วันที่แก้ไขไฟล์ของไฟล์ระยะไกลผ่าน HTTP
ไฟล์ตัวอย่าง: http://example.com/bar/example.pdf
สามารถทำได้โดยไม่ต้องดาวน์โหลดไฟล์จริงหรือไม่? ถ้าไม่เป็นทางเลือกที่ดีที่สุดคืออะไร
ฉันกำลังสร้างสคริปต์ Bash แบบง่าย ๆ เพื่อแยกเวลา / วันที่แก้ไขไฟล์ของไฟล์ระยะไกลผ่าน HTTP
ไฟล์ตัวอย่าง: http://example.com/bar/example.pdf
สามารถทำได้โดยไม่ต้องดาวน์โหลดไฟล์จริงหรือไม่? ถ้าไม่เป็นทางเลือกที่ดีที่สุดคืออะไร
คำตอบ:
ความซื่อสัตย์ไม่ใช่โดยตรง
คุณจะต้องดึงข้อมูลจากเว็บไซต์ระยะไกลเพื่อรับข้อมูลเกี่ยวกับไฟล์ โดยปกติจะทำด้วยการHEAD
ร้องขอ แต่เซิร์ฟเวอร์ (ส่วนใหญ่?) ไม่ได้ติดตั้งอย่างถูกต้องและส่งไฟล์ทั้งหมดเช่นเดียวกับการGET
ร้องขอ สมมติว่าคุณได้curl
ติดตั้ง:
curl -s -v -X HEAD http://foo.com/bar/baz.pdf 2>&1 | grep '^< Last-Modified:'
อาจให้สิ่งที่คุณต้องการ แต่อย่างที่บอกว่าขึ้นอยู่กับเซิร์ฟเวอร์
HEAD
พวกเขามักจะไม่ได้จัดการ อย่างไรก็ตามไซต์เหล่านั้นจะให้ผลลัพธ์แก่คุณเพราะพวกเขาควรจะส่งมอบทุกอย่าง
--head
ตัวเลือกแทน-X HEAD
การใช้คำศัพท์ที่กระชับยิ่งขึ้นดังนั้นคำสั่งจะกลายเป็น: curl -s -v --head http://foo.com/bar/baz.pdf 2>&1 | grep '^< Last-Modified:'
curl -svX HEAD
คือสั้นมากยิ่งขึ้น ...
การตอบกลับของเซิร์ฟเวอร์มักจะมีLast-Modified
ฟิลด์คุณสามารถตรวจสอบได้โดยไม่ต้องดาวน์โหลดไฟล์ ไม่จำเป็นต้องใช้-X HEAD
มีตัวเลือกพิเศษ-I
สำหรับสิ่งนั้น(การ-s
ยับยั้งการส่งออกความคืบหน้า) :
curl -sI http://example.com/bar/example.pdf | grep -i Last-Modified
นอกจากนี้ในกรณีของฉันมีขดไม่มีการติดตั้ง(ที่ฉันทำสคริปต์สำหรับอุปกรณ์ฝังตัว)wget
เพียง วิธีด้วย wget คือ:
wget --server-response --spider http://example.com/bar/example.pdf 2>&1 | grep -i Last-Modified
--server-response
หัวพิมพ์และ--spider
กองกำลังเลือกที่จะไม่ดาวน์โหลดหน้า แต่ตรวจสอบการดำรงอยู่ของพวกเขา
curl
เป็นคำตอบที่ดีกว่าคำตอบที่ได้รับการยอมรับ อาจใช้grep -i
เนื่องจากบ่อยครั้งที่ "ปรับเปลี่ยนครั้งสุดท้าย" มีกรณีที่แตกต่างกัน