ฉันกำลังสร้างสคริปต์ 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เนื่องจากบ่อยครั้งที่ "ปรับเปลี่ยนครั้งสุดท้าย" มีกรณีที่แตกต่างกัน