একটি সম্পূর্ণ ডিরেক্টরি কাঠামো তুলনা করার (ডিফ) সেরা উপায়?


29

ডিরেক্টরি কাঠামো তুলনা করার সবচেয়ে ভাল উপায় কি?

আমার একটি ব্যাকআপ ইউটিলিটি রয়েছে যা আরএসসিএন ব্যবহার করে । উত্স এবং ব্যাকআপের মধ্যে সঠিক পার্থক্য (ফাইলের আকার এবং সর্বশেষ-পরিবর্তিত তারিখগুলির ক্ষেত্রে) বলতে চাই।

কিছুটা এইরকম:

Local file                   Remote file                         Compare
/home/udi/1.txt (date)(size)   /home/udi/1.txt (date)(size)     EQUAL
/home/udi/2.txt (date)(size)   /home/udi/2.txt (date)(size)     DIFFERENT

অবশ্যই, সরঞ্জামটি তৈরি হতে পারে বা পাইথন স্ক্রিপ্টের জন্য একটি ধারণা।

অনেক ধন্যবাদ!

Udi,

উত্তর:


18

টুল আপনার জন্য খুঁজছেন rdiff । এটি rsync এবং বিভিন্ন সংমিশ্রণের মতো কাজ করে। এটি একটি প্যাচ ফাইল তৈরি করে যা আপনি তুলনা করতে বা বিতরণ করতে পারবেন।


9

কিছু লোক বিভিন্ন কারণে ফাইল সিস্টেমের তুলনা করতে চায়, তাই আমি কী চাইছিলাম এবং কীভাবে করেছি তা এখানে লিখব।

আমি চেয়েছি:

  • একই ফাইল সিস্টেমকে নিজের সাথে তুলনা করতে, যেমন, স্ন্যাপশট , পরিবর্তন করুন , স্ন্যাপশট , তুলনা করুন
  • কি ফাইল যুক্ত করা বা অপসারণ করা হয়েছে তার একটি তালিকা, অভ্যন্তরীণ ফাইল পরিবর্তনের বিষয়ে চিন্তা করে না।

আমি কি করেছিলাম:

প্রথম স্ন্যাপশট ( before.shস্ক্রিপ্ট):

find / -xdev | sort > fs-before.txt

দ্বিতীয় স্ন্যাপশট ( after.shস্ক্রিপ্ট):

find / -xdev | sort > fs-after.txt

তাদের তুলনা করতে ( diff.shস্ক্রিপ্ট):

diff -daU 0 fs-before.txt fs-after.txt | grep -vE '^(@@|\+\+\+|---)'

ভাল অংশ এটি বেশ ডিফল্ট সিস্টেম বাইনারি ব্যবহার করে। বিষয়বস্তুর উপর ভিত্তি করে এটি তুলনা করা এমন findএকটি -execপরামিতি যা ফাইলের পাথ এবং এর পরে একটি MD5 প্রতিধ্বনি করে চলেছে।


8

আপনি যদি অন্য কোনও সরঞ্জাম ইনস্টল করার মতো মনে করেন না ...

for host in host1 host2
do
  ssh $host ' 
  cd /dir &&
  find . |
  while
    read line
  do
    ls -l "$line"
  done ' | sort  > /tmp/temp.$host.$$
done
diff /tmp/temp.*.$$ | less
echo "don't forget to clean up the temp files!"

এবং হ্যাঁ, এটি লুপের জন্য যেমন খুঁজে পেতে পারে ঠিক তত সহজেই অনুসন্ধান ও সম্পাদনা বা সন্ধান এবং এক্সারগ দিয়ে করা যেতে পারে। এবং এছাড়াও, আপনি ভিন্নতার আউটপুটটি বেশ সুন্দর করতে পারেন তাই এটি বলে যে "এই ফাইলটি হোস্ট 1 এ আছে তবে হোস্ট 2 নয়" বা এরকম কিছু রয়েছে তবে সেই মুহুর্তে আপনি কেবল সেই সরঞ্জামগুলি ইনস্টল করতে পারেন যা বাকি সবাই কথা বলছে ...


5

আমি ডিরেক্টরি কাঠামোর তুলনা করতে অতীতে ডারডিফ ব্যবহার করেছি । এটি কেবল স্থানীয় sshfsডায়ারে কাজ করে যাতে আপনার অন্যান্য ডিরেক্টরিগুলি পরিচালনা করতে হবে ।

ভাল জিনিস হ'ল ফাইলগুলি সমান হয় বা না এবং কোনটি নতুন বা পুরানো। এবং এটি 5 টি পর্যন্ত ডিরেক্টরি সমর্থন করে। আপনি ডিফারেনসিটিগুলি দেখতে এবং একের পর এক থেকে ফাইলগুলি অনুলিপি করতে পারেন।


4

আরএসসিএন ম্যান পৃষ্ঠা থেকে:

-n, --dry-run
This  makes rsync perform a trial run that doesn’t make any changes (and produces mostly
the same output as a real run).  It is most commonly used in combination  with  the  -v,
--verbose  and/or -i, --itemize-changes options to see what an rsync command is going to
do before one actually runs it.

এই সাহায্য করবে।


ধন্যবাদ, তবে এটি আমার সমস্যার সমাধান করে না (আমি পার্থক্যটি বলতে আসলে ভিন্নতার সন্ধান করছি)।
আদম মতান

4

diff -rআসলে বেশ ভাল কাজ করে। যদি আপনি কেবল ফাইলগুলি পৃথক করে কিনা তা জানতে চান, পার্থক্যের প্রকৃত বিষয়বস্তু নয়, তবে এটি করুনdiff -qr


1
-rঅর্থ পুনরাবৃত্তি, এটি কোনও দূরবর্তী হোস্টের সাথে সংযুক্ত হয় না!
মাইকেল হ্যাম্পটন

3

আমি তার জন্য মেল্ড ব্যবহার করব।


আপনি যদি কোনও জিইউআই সমাধান চান তবে মাঠগুলি এর জন্য সত্যই ভাল কাজ করে।
ড্রয় নোকস

2

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


0

আমি সত্যিই নতুন কিছু ইনস্টল করতে চাইনি, সুতরাং আমার সমাধানটি কিছুটা অশোধিত, তবে দ্রুত এবং কার্যকর।

আমি তুলনা করতে চেয়েছিলাম সমস্ত ফাইল অনুলিপি করা হয়েছে এবং তাদের ফাইল মোড, মালিকানা এবং SELinux সুরক্ষা প্রসঙ্গটি অপরিবর্তিত রয়েছে।

তাই আমি দৌড়েছি:

rsync -aX /orig /copy/

এবং তারপরে এটির তুলনা করুন:

cd /orig && ls -lZR > /tmp/diff_orig
cd /copy && ls -lZR > /tmp/diff_copy
vimdiff /tmp/diff_*

যদি উভয় ফাইলের বিষয়বস্তু ধসে পড়ে যায় তবে সেগুলি অভিন্ন। যদি না হয় তবে ডিফটি প্রদর্শিত হবে।

lsআপনার যে বৈশিষ্ট্যগুলি পরীক্ষা করতে হবে তা প্রতিফলিত করতে প্যারামিটারগুলি আপডেট করুন । YMMV

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.