বাশ স্ক্রিপ্টে HTTP- র মাধ্যমে দূরবর্তী ফাইলের সংশোধন সময় পান


13

আমি এইচটিটিপি-র মাধ্যমে একটি রিমোট ফাইলের সময় পরিবর্তনের সময় / তারিখটি ফাইলের জন্য একটি সাধারণ বাশ স্ক্রিপ্ট তৈরি করছি।

উদাহরণ ফাইল: 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
"বেশিরভাগ"? আমি যদি অবাক হব যে কোনও জনপ্রিয় এইচটিটিপি সার্ভার যদি এমনভাবে প্রোটোকল লঙ্ঘন করে।
user1686

এটা অবশ্যই পরিবর্তন করা উচিত ছিল। কিছু সময় আগে, যখন আমি এই জাতীয় সমস্যাগুলি মোকাবেলা করেছি, তখন এটি এমন ছিল। তবে সময় কেটে যায়। যদি আপনি এমন সাইটগুলি সন্ধান করেন যা এখনও "অ্যাপস" যা কিছু হিসাবে সিজি চলছে, সেগুলি সম্ভবত পরিচালনা করছে না 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
@ হাই-অ্যাঞ্জেল নং, সাধারণত নেই। উইজেট যদি সংশোধিত-যেহেতু শিরোলেখটি ব্যবহার করে "হেই কেবলমাত্র এই ফাইলটি এই তারিখের চেয়ে নতুন করে প্রেরণ করবে" বলার জন্য ব্যবহার করে, তারপরে সেই শিরোনামটি প্রয়োগ এবং সম্মান করা সার্ভারের উপর নির্ভর করে। সার্ভারটি যদি মনে করে যে ফাইলটি পরিবর্তন হয়নি তবে এটি একটি 304 রূপান্তরিত প্রতিক্রিয়া প্রেরণ করে।
অ্যান্টোনেস্টাম

12

সার্ভারের প্রতিক্রিয়াটির সাধারণত Last-Modifiedক্ষেত্র থাকে, আপনি ফাইলটি ডাউনলোড না করে এটি পরীক্ষা করতে পারেন। ব্যবহারের কোন প্রয়োজন নেই -X HEAD, সেখানে একটি বিশেষ বিকল্প -Iযে জন্য ( -sশুষে অগ্রগতি আউটপুট) :

curl -sI http://example.com/bar/example.pdf | grep -i Last-Modified

এছাড়াও আমার ক্ষেত্রে কোনও কার্ল ইনস্টল করা হয়নি (আমি এমবেডড ডিভাইসের জন্য একটি স্ক্রিপ্ট করছি) , ঠিক আছে 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 নোটের জন্য, সম্পাদিত।
হাই-এঞ্জেল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.