আপনার ম্যাকের একটি প্রোজেক্ট ফোল্ডারের সাথে একটি SSH-অ্যাক্সেসযোগ্য সার্ভারের কপির তুলনা করতে, ড্রাই-রান (dry-run) মোডে rsync ব্যবহার করুন। এটি ফাইলগুলো স্থানান্তর বা পরিবর্তন না করেই কোনগুলো সিঙ্কের বাইরে রয়েছে তা তালিকাভুক্ত করতে পারে। একটি ফাইলের ভেতরের টেক্সট পার্থক্যের জন্য, উভয় সংস্করণ ম্যাকে নিয়ে আসার পর diff ব্যবহার করুন। এই নির্দেশিকাটি মূলত একটি রিমোট ডিরেক্টরির সাথে একটি লোকাল প্রোজেক্ট ডিরেক্টরি তুলনার ওপর আলোকপাত করে; এটি ধরে নেয় না যে কপি দুটি সিঙ্ক্রোনাইজড রয়েছে বা কোন সংস্করণটি রাখা উচিত তা নির্ধারণ করে দেয় না।
প্রথমে সংযোগ এবং পাথ পরীক্ষা করুন
আপনার ম্যাকে টার্মিনাল খুলুন। অ্যাপলের নথি অনুযায়ী, টার্মিনাল রিমোট সার্ভারের সাথে সংযোগ করতে যে প্রোটোকলগুলো ব্যবহার করতে পারে তার মধ্যে SSH একটি; কমান্ড-লাইন ssh ক্লায়েন্টের মাধ্যমে আপনি রিমোট মেশিনে কমান্ডও চালাতে পারেন। আপনার একটি সার্ভারের নাম, একটি রিমোট অ্যাকাউন্ট, প্রোজেক্ট ডিরেক্টরিতে অ্যাক্সেস এবং সচল SSH প্রমাণীকরণ প্রয়োজন হবে। Apple-এর টার্মিনাল গাইড এবং OpenBSD ssh ম্যানুয়াল-এ এই সংযোগের বিকল্পগুলো বর্ণনা করা হয়েছে।
নিচের উদাহরণস্বরূপ অ্যাকাউন্ট, হোস্ট এবং ফোল্ডারের নামগুলো আপনার নিজস্ব তথ্য দিয়ে প্রতিস্থাপন করুন। রিমোট মেশিনে rsync ইনস্টল করা থাকতে হবে এবং আপনার অ্যাকাউন্টের জন্য উপলব্ধ হতে হবে। rsync --version লোকাল সংস্করণ প্রদর্শন করে; রিমোট সংস্করণটি ssh user@host rsync --version দিয়ে পরীক্ষা করা যেতে পারে।
ssh user@server.example.com
যদি সেই লগইন ব্যর্থ হয়, তবে ফাইল তুলনা করার আগে হোস্ট, প্রমাণীকরণ, নেটওয়ার্ক বা অ্যাক্সেস সংক্রান্ত সমস্যার সমাধান করুন। তারপর দুটি প্রোজেক্ট ডিরেক্টরি সঠিকভাবে শনাক্ত করুন। উদাহরণগুলোতে, /Users/you/Projects/site হলো লোকাল এবং /srv/projects/site হলো রিমোট। একই আপেক্ষিক বিন্যাসে ডিরেক্টরির বিষয়বস্তু তুলনা করার জন্য প্রতিটি ডিরেক্টরি পাথের শেষে ট্রেইলিং স্ল্যাশ (trailing slash) বজায় রাখুন। যেসব পাথে স্পেস রয়েছে সেগুলো কোটেশনের (" ") মধ্যে রাখুন।
কোন ফাইলগুলো আলাদা তা প্রাকদর্শন (প্রিভিউ) করুন
আপনার ম্যাক থেকে এই কমান্ডটি চালান:
rsync -rnic --out-format='%i %n' \
user@server.example.com:/srv/projects/site/ \
/Users/you/Projects/site/
রিমোট পাথটি হলো উৎস (source) এবং ম্যাকের পাথটি হলো গন্তব্য (destination)। কমান্ডটিতে রিকার্শন (-r), আইটেমাইজড পরিবর্তনের আউটপুট (-i), চেকসাম তুলনা (-c) এবং ড্রাই-রান মোড (-n) ব্যবহার করা হয়েছে। Rsync-এর ডকুমেন্টেশন অনুযায়ী, ড্রাই-রান কোনো পরিবর্তন করে না; আইটেমাইজড আউটপুট প্রস্তাবিত আপডেটগুলোর একটি সংক্ষিপ্ত তালিকা দেয়। এই নির্দেশনায়, তালিকাভুক্ত কোনো আইটেম বোঝায় যে রিমোট উৎসটি লোকাল গন্তব্য থেকে আলাদা, অথবা সেখানে অনুপস্থিত। rsync ম্যানুয়ালে ড্রাই-রান, আইটেমাইজড পরিবর্তন এবং চেকসাম তুলনার নথিভুক্ত বিবরণ রয়েছে।
চেকসাম মোড বিষয়বস্তু তুলনা করার জন্য উভয় পাশের ফাইল ডেটা পড়ে, তাই এটি rsync-এর ডিফল্ট দ্রুত পরীক্ষার (quick check) চেয়ে বেশি সময় নিতে পারে এবং বেশি ডিস্ক I/O ব্যবহার করতে পারে, যা মূলত ফাইলের আকার এবং পরিবর্তনের সময়ের ওপর নির্ভর করে। টাইমস্ট্যাম্প বা আকার পরিবর্তন না দেখালেও ভেতরের বিষয়বস্তু গুরুত্বপূর্ণ হলে -nic ব্যবহার করুন। দ্রুত প্রাথমিক যাচাইয়ের জন্য এর পরিবর্তে -rin ব্যবহার করুন; এটি rsync-এর দ্রুত পরীক্ষা দ্বারা শনাক্তকৃত পরিবর্তনগুলো রিপোর্ট করে এবং আকার ও পরিবর্তনের সময় উভয়ই মিলে গেলে বিষয়বস্তুর পরিবর্তনগুলো এড়িয়ে যেতে পারে। এই প্রিভিউতে ফাইলের ভেতরের পরিবর্তিত লাইনগুলো প্রদর্শিত হয় না।
যদি ম্যাকের কপিটিকে উৎস এবং রিমোট কপিটিকে গন্তব্য হিসেবে বিবেচনা করতে হয়, তবে পাথ দুটি বিপরীত করুন। দিকটি অত্যন্ত গুরুত্বপূর্ণ: rsync-এর আইটেমাইজড মার্কারগুলো গন্তব্যে এটি কী আপডেট করবে তা নির্দেশ করে। ফলাফল পর্যালোচনা করার সময় -n বজায় রাখুন। আপনি সচেতনভাবে ট্রান্সফার করার সিদ্ধান্ত নিলেই কেবল এটি সরান; rsync একটি অনুলিপি করার টুল, দ্বিমুখী মার্জ (merge) নয়।
টেক্সট ফাইলের পার্থক্যের বিষয়বস্তু পড়ুন
প্রকৃত লাইনের পরিবর্তনগুলো পরীক্ষা করতে, diff -u দিয়ে দুটি লোকাল ফাইল তুলনা করুন। প্রথমে আপনার সাধারণ অনুমোদিত ট্রান্সফার পদ্ধতি ব্যবহার করে একটি সংস্করণ একটি পৃথক অস্থায়ী অবস্থানে অনুলিপি করুন, অথবা আপনার লোকাল সিস্টেমে ইতিমধ্যে থাকা প্রোজেক্টের একটি কপি ব্যবহার করুন। তারপর চালান:
diff -u \
"/Users/you/Projects/site/config/settings.yml" \
"/Users/you/Desktop/settings-remote.yml"
ইউনিফাইড আউটপুট পরিবর্তিত লাইনগুলোর চারপাশে কাছাকাছি প্রসঙ্গ বা কনটেক্সট প্রদর্শন করে। - উপসর্গযুক্ত লাইনগুলো প্রথম ফাইল থেকে এসেছে; + উপসর্গযুক্ত লাইনগুলো দ্বিতীয় ফাইল থেকে এসেছে। diff কেবল বিষয়বস্তু তুলনা করে, তাই এটি কোনো সম্পাদনা স্থানান্তর বা মার্জ করবে না। সম্পূর্ণ লোকাল ডিরেক্টরি ট্রির জন্য, diff -ru local-folder remote-folder রিকার্সিভভাবে সংশ্লিষ্ট ফাইলগুলোর তুলনা করে, তবে রিমোট ফোল্ডারটি মাউন্ট করা বা লোকাল পাথ হিসেবে উপলব্ধ থাকতে হবে। GNU Diffutils ম্যানুয়াল রিকার্সিভ ডিরেক্টরি তুলনা এবং ইউনিফাইড আউটপুট ব্যাখ্যা করে; macOS কমান্ড অপশন ভিন্ন হতে পারে, তাই কোনো অপশন প্রত্যাখ্যাত হলে আপনার ম্যাকে man diff দেখুন। GNU Diffutils manual।
কোনো পদক্ষেপ নেওয়ার আগে সীমাবদ্ধতাগুলো বুঝুন
একটি ত্রুটিহীন rsync প্রিভিউয়ের অর্থ হলো আপনার নির্বাচিত তুলনার নিয়ম এবং পাথ ব্যবহার করে কোনো পার্থক্য পাওয়া যায়নি। এটি পাশাপাশি (side-by-side) পর্যালোচনা দেখায় না, বিরোধপূর্ণ সম্পাদনা সমাধান করে না বা প্রতিটি ফাইল সিস্টেমের বৈশিষ্ট্য হুবহু এক হওয়ার নিশ্চয়তা দেয় না। Rsync-এর চেকসাম অপশন ফাইলের বিষয়বস্তু তুলনা করে, অন্যদিকে পারমিশন ও টাইমস্ট্যাম্পের মতো মেটাডেটা নির্ভর করে আপনি কোন অপশনগুলো বেছে নিয়েছেন তার ওপর। এছাড়াও, প্রিভিউয়ের পর ফাইল ট্রি পরিবর্তন হতে পারে যদি কেউ যেকোনো একটি কপিতে সম্পাদনা করে।
রিমোট সিস্টেমে যদি SSH বা rsync অ্যাক্সেস না থাকে, তবে এই নির্দেশিকা অনুযায়ী কাজটি করা যাবে না। সেই সিস্টেমের অনুমোদিত কোনো অ্যাক্সেস পদ্ধতি ব্যবহার করুন, দুটি অ্যাক্সেসযোগ্য লোকাল কপি তৈরি করুন এবং diff বা অন্য কোনো উপযুক্ত তুলনা টুলের মাধ্যমে সেগুলো পরীক্ষা করুন। আপনি যদি উৎস-থেকে-গন্তব্যে আপডেটের আচরণ না চান, তবে প্রিভিউয়ের জায়গায় কোনো অবস্থাতেই ট্রান্সফার কমান্ড চালাবেন না।
তথ্যসূত্র
Connect to servers in Terminal on Mac — Apple Support
ssh(1) — OpenBSD manual pages — OpenBSD
rsync(1) manpage — The Samba Project
Comparing and Merging Files — GNU Project