รับเวลาแก้ไขไฟล์ระยะไกลผ่าน HTTP ใน Bash script


13

ฉันกำลังสร้างสคริปต์ Bash แบบง่าย ๆ เพื่อแยกเวลา / วันที่แก้ไขไฟล์ของไฟล์ระยะไกลผ่าน HTTP

ไฟล์ตัวอย่าง: http://example.com/bar/example.pdf

สามารถทำได้โดยไม่ต้องดาวน์โหลดไฟล์จริงหรือไม่? ถ้าไม่เป็นทางเลือกที่ดีที่สุดคืออะไร

คำตอบ:


13

ความซื่อสัตย์ไม่ใช่โดยตรง

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

curl -s -v -X HEAD http://foo.com/bar/baz.pdf 2>&1 | grep '^< Last-Modified:'

อาจให้สิ่งที่คุณต้องการ แต่อย่างที่บอกว่าขึ้นอยู่กับเซิร์ฟเวอร์


6
"ส่วนใหญ่"? ฉันจะแปลกใจหากเซิร์ฟเวอร์ HTTP ยอดนิยมใด ๆละเมิดโปรโตคอลในลักษณะดังกล่าว
user1686

ควรมีการเปลี่ยนแปลงแน่นอน บางครั้งที่ผ่านมาเมื่อฉันจัดการกับปัญหาดังกล่าวมันเป็นเช่นนั้น อย่างไรก็ตามเวลาผ่านไป หากคุณพบเว็บไซต์ที่ยังคงทำงาน cgi สิ่งที่ "ปพลิเคชัน" HEADพวกเขามักจะไม่ได้จัดการ อย่างไรก็ตามไซต์เหล่านั้นจะให้ผลลัพธ์แก่คุณเพราะพวกเขาควรจะส่งมอบทุกอย่าง
Karsten S.

3
ฉันขอแนะนำให้ใช้--headตัวเลือกแทน-X HEADการใช้คำศัพท์ที่กระชับยิ่งขึ้นดังนั้นคำสั่งจะกลายเป็น: curl -s -v --head http://foo.com/bar/baz.pdf 2>&1 | grep '^< Last-Modified:'
Gautham C.

1
curl -svX HEADคือสั้นมากยิ่งขึ้น ...
เท่นเอส

1
@ Hi-Angel ไม่มีโดยทั่วไปไม่ได้ Wget ใช้ส่วนหัว If-Modified-Since เพื่อพูดว่า "เดี๋ยวก่อนส่งไฟล์นั้นถ้ามันใหม่กว่าวันที่นี้" มันขึ้นอยู่กับเซิร์ฟเวอร์แล้วที่จะใช้งานและเคารพส่วนหัวนั้น หากเซิร์ฟเวอร์คิดว่าไฟล์นั้นไม่มีการเปลี่ยนแปลงก็จะส่งการตอบกลับ 304 NOT MODIFIED
antonagestam

12

การตอบกลับของเซิร์ฟเวอร์มักจะมี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กองกำลังเลือกที่จะไม่ดาวน์โหลดหน้า แต่ตรวจสอบการดำรงอยู่ของพวกเขา


2
นี่curlเป็นคำตอบที่ดีกว่าคำตอบที่ได้รับการยอมรับ อาจใช้grep -iเนื่องจากบ่อยครั้งที่ "ปรับเปลี่ยนครั้งสุดท้าย" มีกรณีที่แตกต่างกัน
not2qubit

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