Bash स्क्रिप्ट में HTTP पर दूरस्थ फ़ाइल का संशोधन समय प्राप्त करें


13

मैं एक साधारण बैश स्क्रिप्ट बना रहा हूं ताकि 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। फिर भी, उन साइटों को भी आपको परिणाम मिलेगा, क्योंकि वे सब कुछ देने वाले हैं।
कार्स्टन एस।

3
मैं सुझाव देता हूं कि --headविकल्प का उपयोग करने के बजाय -X HEADइसके अधिक स्वर के कारण कमांड बन जाएगी: curl -s -v --head http://foo.com/bar/baz.pdf 2>&1 | grep '^< Last-Modified:'
गौतम सी।

1
curl -svX HEADऔर भी अधिक कठिन है ...
कर्स्टन एस।

1
@ हाय-एंजेल नहीं, आमतौर पर नहीं है। Wget इफ़-मोडिफ़ाइड-हेडर का उपयोग करने के लिए कहता है "हे केवल उस फ़ाइल को भेजें यदि यह इस तारीख से नया है", तो यह उस हेडर को लागू करने और सम्मान करने के लिए सर्वर पर निर्भर है। यदि सर्वर को लगता है कि फ़ाइल नहीं बदली गई है तो वह 304 NOT MODIFIED प्रतिक्रिया भेजता है।
एन्टनगैस्टम

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 thx, संपादित किया गया।
हाय-एंजेल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.