diff কমান্ডটি লিনাক্স শেল থেকে ফাইল বা ডিরেক্টরি তুলনার একটি সহজ উপায়। এই আর্টিকেলে এর ব্যবহার দেখানো হয়েছে কিছু সাধারণ উদাহরণসহ।
diff কমান্ডটি দুটি ফাইল বা ডিরেক্টরির লাইন-বাই-লাইন তুলনা করে এবং তাদের পার্থক্য আউটপুট করে।
আপনি কেন ফাইল বা ডিরেক্টরি তুলনা করতে চাবেন?
- আপনার একই নামে দুটি ফাইল থাকতে পারে যা দেখতে এক जैসা মনে হয় এবং আপনি তাদের পার্থক্য দেখতে চান।
- আপনার তৈরি করা একটি প্রজেক্টের প্রোগ্রামিং কোডের পরিবর্তন একটি নতুন এবং পুরানো ভার্সনের মধ্যে তুলনা করা।
- আপনি অনেক ফাইল অন্য একটি ড্রাইভে কপি করেছেন এবং সবকিছু সফলভাবে এবং করাপশন ছাড়া কপি হয়েছে কিনা তা নিশ্চিত করতে চান।
- আপনি এবং আপনার বন্ধু একই সেট ফাইল একটি ফোল্ডারে রাখেন। আপনি আপনার ফাইলগুলোতে পরিবর্তন আনলেন, কিন্তু সবগুলো আবার আপনার বন্ধুকে পাঠাতে চান না। আপনি diff ব্যবহার করে শুধু পরিবর্তনগুলো ধারণকারী একটি প্যাচ তৈরি করতে পারেন, সেটি তাদের পাঠাতে পারেন, এবং তারপরে পুরো কিছু পুনরায় ডাউনলোড না করেই তাদের কপি আপডেট করতে পারেন।
ফাইল তুলনার জন্য আপনার নিজস্ব কারণ থাকতে পারে, তাই চলুন diff এবং এর ব্যবহার 쪽으로।
diff সিনট্যাক্স
diff OPTIONS FILES
মনে রাখবেন:
- OPTIONS অপশনাল এবং নিচের টেবিল থেকে প্রদান করা যেতে পারে
- FILES হলো তুলনা করার জন্য দুটি ফাইলের পাথ, স্পেস দিয়ে আলাদা করা
diff অপশন
ইউজার ম্যানুয়াল থেকে সরাসরি diff কমান্ডের সবচেয়ে সাধারণভাবে ব্যবহৃত OPTIONS গুলো নিচে:
| অপশন | বর্ণনা |
|---|---|
| -q, –brief | শুধু ফাইলগুলো ভিন্ন হলে রিপোর্ট করুন |
| -s, –report-identical-files | দুটি ফাইল একই হলে রিপোর্ট করুন |
| -u, -U NUM, –unified[=NUM] | NUM (ডিফল্ট ৩) লাইন ইউনিফাইড কন্টেক্সট আউটপুট করুন |
| -N –new-file | অনুপস্থিত ফাইলকে খালি মনে করুন |
| -l, –paginate | 'pr' এর মাধ্যমে আউটপুট পাস করে পেজিনেট করুন |
| -r, –recursive | খুঁজে পাওয়া সাবডিরেক্টরিগুলো রিকার্সিভলি তুলনা করুন |
| –no-dereference | সিমবলিক লিঙ্ক ফলো করবেন না |
| -a, –text | সকল ফাইলকে টেক্সট হিসেবে বিবেচনা করুন |
| -d, –minimal | ছোট পরিবর্তন সেট খুঁজে বের করার চেষ্টা করুন |
| –speed-large-files | বড় ফাইল এবং ছড়ানো ছোট পরিবর্তন অনুমান করুন |
আপনি এখানে ফুল ম্যানুয়াল দেখতে পারেন বা রান করুন:
man diff
…কমান্ড লাইন থেকে পূর্ণ অপশন সেট পেতে।
উদাহরণ
diff দিয়ে লিনাক্সে ফাইল তুলনা
এটি diff কমান্ডের সবচেয়ে সহজ ব্যবহার এবং কনসোলে দুটি সরবরাহকৃত ফাইলের পার্থক্য আউটপুট করবে:
diff file1.txt file2.txt
আউটপুট রিডাইরেক্ট করা
আপনি যদি প্যাচ তৈরি করার বদলে পার্থক্য দেখতে চান, আউটপুট একটি ফাইলে রিডাইরেক্ট করা ব্যবহারিক – যাতে টার্মিনাল অনেক পরিবর্তন থাকলে সেগুলো কাটিয়ে না ফেলে:
diff -q file1.txt file2.txt > differences.txt
এটি differences.txt তৈরি করবে (অথবা ওভাররাইট করবে!), যা দুটি ফাইলের পার্থক্য সারাংশ করবে।
-q অপশনটি যোগ করা হয়েছে যাতে শুধু পার্থক্যগুলো লিস্ট করা হয়; একই ফাইলগুলো উল্লেখ করা হবে না যাতে কী হচ্ছে সেটি সহজে বোঝা যায়।
diff দিয়ে ডিরেক্টরি তুলনা
ডিরেক্টরিও -r (রিকার্সিভ) অপশন ব্যবহার করে তাদের কন্টেন্ট তুলনা করা যায়:
diff -r -q /path/to/dir1 /path/to/dir2
এখানেও আমি -q অপশন ব্যবহার করেছি যাতে শুধু পার্থক্যগুলো লিস্ট করা হয়।
বড় ফাইল বা বড় ফাইল ধারণকারী ডিরেক্টরি তুলনা
diff একটি ইনটেনসিভ প্রসেস – তুলনা করা প্রতিটি ফাইল পড়া এবং তুলনা করা দরকার। এতে কিছুটা সময় লাগতে পারে।
–speed-large-files অপশনটি diff-এর অ্যালগরিদম পরিবর্তন করে বড় ফাইল তুলনা করার সময় আরও দক্ষ করে তোলে – কিছুটা গতিবর্ধন করে।
একটি ফাইলের জন্য প্যাচ তৈরি করা
একটি প্যাচ তৈরি করতে – দুটি ফাইলের পার্থক্যের একটি তালিকা যা প্রথম ফাইলের অন্য একটি কপিতে প্রয়োগ করা যাবে যাতে সেটি দ্বিতীয় ফাইলের সাথে একই হয়, নিচের কমান্ড ব্যবহার করা যেতে পারে:
diff -u file1.txt file2.txt > update.patch
-u অপশনটি পার্থক্যগুলো ইউনিফাইড ফরম্যাটে আউটপুট করে যা patch কমান্ড দ্বারা মূল ফাইল আপডেট করতে ব্যবহার করা যায়।
এটি উপযোগী যদি আপনার কোনো বন্ধু বা সহকর্মী আপনার কিছু ডেটা বা প্রোগ্রামিং কোড ব্যবহার করে, এবং আপনি আপনার করা আপডেটগুলো পুরো ডেটাসেট বা অ্যাপ্লিকেশন আবার পাঠানো ছাড়াই তাদের পাঠাতে চান।
একটি ফাইলের জন্য প্যাচ ইনস্টল করা
যখন আপনার বন্ধু প্যাচটি পাবে, তিনি নিচের patch কমান্ড দিয়ে প্রয়োগ করতে পারেন:
patch original.txt < update.patch
একটি ফাইলের জন্য প্যাচ анডু করা
আপনি যদি ভুল করেন, -R অপশন দিয়ে রিভার্সে প্যাচ রান করে আনডু করতে পারেন:
patch -R original.txt < update.patch
একটি ডিরেক্টরির জন্য প্যাচ তৈরি করা
নিচের কমান্ডটি -r (রিকার্সিভ), -u (ইউনিফাইড ফরম্যাট), এবং -N (অনুপস্থিত ফাইলকে খালি মনে করা) অপশন রান করে একটি পুরো ডিরেক্টরির জন্য প্যাচ তৈরি করবে:
diff -ruN originalDir updatedDir > update.patch
একটি ডিরেক্টরির জন্য প্যাচ ইনস্টল করা
একটি প্যাচ ডিরেক্টরিতে -p0 অপশন দিয়ে প্রয়োগ করা যায়, যা প্যাচটি সে ডিরেক্টরি স্ট্রাকচারে প্রয়োগ করবে যেটি তৈরি হওয়ার সময় ছিল:
patch -p0 < update.patch
একটি ডিরেক্টরির জন্য প্যাচ анডু করা
শেষে, একটি ডিরেক্টরির প্যাচিং উল্টা করা/রিভার্স করা:
patch -R -p0 originalFile < patchFile