একটি কমান্ড লাইন পদ্ধতি আছে যার দ্বারা আমি ডাউনলোড করা ফাইলটি সম্পূর্ণ কিনা তা ভাঙ্গতে পারি কিনা তা পরীক্ষা করতে পারি?


13

আমি একটি স্ক্রিপ্ট লিখছি যাতে কোনও ফাইল ডাউনলোড এবং ম্যানিপুলেট করা জড়িত এবং আমি কাজটি করার আগে আমি নিশ্চিত করতে চাই যে ফাইলটি অসম্পূর্ণ নয় (উদাহরণস্বরূপ একটি বাদ দেওয়া সংযোগের কারণে)।

উত্তর:


10

ডাউনলোড করা ফাইলগুলির অখণ্ডতা যাচাই করার সবচেয়ে সাধারণ উপায় হ'ল এমডি 5 চেকসাম ব্যবহার করা use এটি ধরে নিয়েছে যে আপনি যে সাইটটি ডাউনলোড করছেন প্রকৃতপক্ষে তাদের ফাইলগুলির MD5 চেকসাম থেকে ডাউনলোড করছেন। আপনি ডাউনলোড করা ফাইলটির নিজস্ব চেকসাম তৈরি করে এবং এটি প্রকাশিত চেকসামের সাথে তুলনা করে একটি MD5 চেকসাম যাচাই করতে পারেন। যদি সেগুলি অভিন্ন হয় তবে আপনার ডাউনলোড করা ফাইলটি সম্পূর্ণ এবং এতে কোনও ছলনা নেই।

আপনি যে ফাইলটি ডাউনলোড করছেন তা পরিবর্তনের জন্য যদি আপনি প্রত্যাশা না করেন তবে আপনি একটি চেকসাম এবং হার্ড কোডটিকে স্ক্রিপ্টে প্রতিরোধ করতে পারেন তবে ফাইলটি যদি কখনও আপডেট হয় তবে যাচাইকরণ ব্যর্থ হবে।

একটি ফাইল রান একটি MD5 চেকসাম তৈরি করতে md5sum myFile। উইজেটের ক্ষেত্রে আপনি এই কমান্ডটি দরকারী মনে করতে পারেন, বিশেষত আপনি যে ফাইলটি ডাউনলোড করছেন তা যদি বড় হয়:

wget -O - http://example.com/myFile | tee myFile | md5sum > MD5SUM

এটি ডাউনলোড করার সময় "মাইফাইল" এর একটি চেকসাম তৈরি করবে এবং এটি এমডি 5 এসএমএম ফাইলে সংরক্ষণ করবে, সম্ভবত আপনার কিছুটা সময় সাশ্রয় করবে।

বাদ পড়া সংযোগের ক্ষেত্রে আমি মনে করি সবচেয়ে ভাল উপায় হ'ল উইজেটের প্রস্থান কোডগুলি পরীক্ষা করা। ডাউনলোড সফল হলে কোনও ত্রুটি ছাড়াই উইজেট ফিরে আসবে 0। অন্য যে কোনও কিছুতে ভুল হয়েছে indicates এর "প্রস্থান স্থিতি" বিভাগটি একবার দেখুন man wget


2
প্রস্থান কোডগুলি: gnu.org/software/wget/manual/html_node/…
মাইকজার্ভ

7

ফাইলটি ডাউনলোড করতে ব্যবহৃত কমান্ডের রিটার্ন কোড আপনাকে জানাবে যে কমান্ডটি সফলভাবে কার্যকর হয়েছে কিনা। সাধারণত, 0 টির একটি রিটার্ন কোড সাফল্যকে বোঝায় এবং যে কোনও শূন্য নয় এমন একটি ত্রুটি চিহ্নিত করে। আপনি $?ভেরিয়েবলের মাধ্যমে রিটার্ন কোডটি অ্যাক্সেস করতে পারেন ।

ব্যবহারের একটি প্রাথমিক উদাহরণ wgetযেতে হবে:

#!/bin/bash

wget foo.tgz &> /dev/null

if [[ "$?" != 0 ]]; then
    echo "Error downloading file"
else
    echo "Success"
fi

&> /dev/nullউইজেটের সমস্ত আউটপুট /dev/nullএটিকে পুনর্নির্দেশ করে যাতে এটি স্ক্রিপ্টিংয়ের জন্য আদর্শ তবে এটি ডিবাগিং wgetত্রুটিগুলিকে আরও কঠিন করে তোলে ।


4
আপনি পরিবর্তে এটি করতে পারেন:wget -q ... || { handle ; error ; }
মাইকজার্ভ

@ মিমিকার্ভ এমনকি সেখানে জানতেন না, দুর্দান্ত টাচ
ক্রিক

1
শুধুমাত্র manউত্তর দেওয়ার সময় পড়ার সময় এটি খুঁজে পেয়েছিল এবং আমি যে দুটি জিনিস বলতে যাচ্ছিলাম তা ইতিমধ্যে দুটি উত্তরে এখানে ছিল - তাই আমি দুটি মন্তব্য করেছিলাম। আপনারও খুব ভাল লাগল।
মাইকজার্ভ

আমি আশা করি এটি টরের মতো সোকস প্রক্সির সাথে ব্যবহৃত হলে এটি কাজ করবে না।
কোডসইনচওস

1
@ ক্রিক আমি যা বোঝাতে চাইছিলাম তা হ'ল ডাউনলোডটি সম্পূর্ণরূপে ভাঙলেও wget, এটি বন্ধ হয়ে গেলেও। ভাঙ্গা টিসিপি সংযোগগুলি সম্পর্কিত বনাম টিসিপি সংযোগগুলি সম্পর্কিত প্রক্সি তথ্য যা এইচটিটিপি নিয়ে সমস্যাযুক্ত কারণ এটি ডিফল্টরূপে ক্লোজড টিসিপিকে শেষ চিহ্ন হিসাবে ব্যবহার করে। এই কারণেই আমি একটি চেক যোগ করেছি যদি আমি একটি গণ ডাউনলোড চালানোর সময় শিরোনাম থেকে ফাইলের আকার ডাউনলোড ফাইলের আকারের সাথে মেলে। নিশ্চিত নয় যে wgetএই ধরণের ধারাবাহিকতা পরীক্ষা করে কিনা বা এই সমস্যাটিতে HTTP স্পেস কী বলে।
কোডসইনচওস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.