@डरবার্টের উত্তরটি দুর্দান্ত, যদিও আমি খুঁজে পাওয়া কিছু অন্যান্য তথ্য ভাগ করতে চাই।
gzip -l -v
জিজিপ-সংকুচিত ফাইলগুলিতে ইতিমধ্যে একটি হ্যাশ রয়েছে (যদিও সুরক্ষিত নয়, এই এসও পোস্টটি দেখুন ):
$ echo something > foo
$ gzip foo
$ gzip -v -l foo.gz
method crc date time compressed uncompressed ratio uncompressed_name
defla 18b1f736 Feb 8 22:34 34 10 -20.0% foo
একটি দ্রুত ফিঙ্গারপ্রিন্ট পেতে সিআরসি এবং সঙ্কুচিত আকার একত্রিত করতে পারে:
gzip -v -l foo.gz | awk '{print $2, $7}'
CMP
দুটি বাইট সমান কিনা তা পরীক্ষা করার জন্য ব্যবহার করুন cmp file1 file2
। এখন, একটি জিজেপড ফাইলে ডেটা এবং ফুটার (সিআরসি প্লাস মূল আকার) যুক্ত কিছু শিরোনাম রয়েছে। Gzip, বিন্যাসের বিবরণ শো যে হেডার যখন ফাইলটি কম্প্রেস করা হয় এবং ফাইলের নাম একটি nul-সমাপ্ত স্ট্রিংটি 10-বাইট হেডার পর যোগ হয় যে ধারণ করে।
সুতরাং, ধরে নিলাম যে ফাইলের নামটি ধ্রুবক এবং একই কমান্ড ( gzip "$name"
) ব্যবহার করা হয়েছে, cmp
সময়টি সহ প্রথম বাইট ব্যবহার করে এবং এড়িয়ে গিয়ে দুটি ফাইল পৃথক কিনা তা পরীক্ষা করতে পারে :
cmp -i 8 file1 file2
দ্রষ্টব্য : অনুমান যে একই সংকোচন বিকল্পগুলি গুরুত্বপূর্ণ, অন্যথায় কমান্ড সর্বদা ফাইল হিসাবে পৃথক হিসাবে রিপোর্ট করবে। এটি ঘটে কারণ সংকোচন বিকল্পগুলি শিরোনামে সঞ্চিত থাকে এবং সংকোচিত ডেটাগুলিকে প্রভাবিত করতে পারে। cmp
কেবল কাঁচা বাইট দেখেন এবং এটিকে gzip হিসাবে ব্যাখ্যা করবেন না।
আপনার যদি একই দৈর্ঘ্যের ফাইলের নাম থাকে তবে আপনি ফাইলের নামটি পড়ার পরে বাদ দিতে হবে বাইটগুলি গণনা করার চেষ্টা করতে পারেন। যখন ফাইলের নামগুলি বিভিন্ন আকারের হয়, আপনি cmp
বাইটগুলি বাদ দেওয়ার পরে চালাতে পারেন cmp <(cut -b9- file1) <(cut -b10- file2)
।
zcmp
এটি অবশ্যই যাওয়ার সর্বোত্তম উপায়, এটি প্রথমে ডেটা সংকুচিত করে এবং বাইটের সাথে তুলনা শুরু করে cmp
(সত্যই, এটি zcmp
( zdiff
) শেলসক্রিপ্টে করা হয়)।
একটি নোট, ম্যানুয়াল পৃষ্ঠাতে নিম্নলিখিত নোটটি থেকে ভয় পাবেন না:
তুলনা করার আগে যখন উভয় ফাইলকে সঙ্কুচিত করা আবশ্যক তখন দ্বিতীয়টি / tmp তে সংকুচিত হবে। অন্যান্য সমস্ত ক্ষেত্রে, zdiff এবং zcmp কেবল একটি পাইপ ব্যবহার করে।
যখন আপনার পর্যাপ্ত পরিমাণে নতুন বাশ থাকবে তখন সংক্ষেপণ একটি অস্থায়ী ফাইল ব্যবহার করবে না, কেবল একটি পাইপ। বা, zdiff
সূত্রটি যেমন বলেছে:
# Reject Solaris 8's buggy /bin/bash 2.03.