সংস্করণ ৩.৩ বা তার পরে এর জন্য diff
, পিট হার্লানের উত্তরে--no-dereference
বর্ণিত আপনার বিকল্পটি ব্যবহার করা উচিত ।
দুর্ভাগ্যক্রমে, পুরানো সংস্করণগুলি diff
সিমলিঙ্কগুলি উপেক্ষা করে সমর্থন করে না :
কিছু ফাইল ডিরেক্টরি বা নিয়মিত ফাইল নয়: এগুলি প্রতীকী লিঙ্কগুলি, ডিভাইসের বিশেষ ফাইলগুলি, নামযুক্ত পাইপ এবং সকেটের মতো অস্বাভাবিক ফাইল। বর্তমানে, diff
নিয়মিত ফাইলগুলির মতো প্রতীকী লিঙ্কগুলি আচরণ করে; এটি অন্যান্য বিশেষ ফাইলগুলিকে নিয়মিত ফাইলগুলির মতো আচরণ করে যদি সেগুলি শীর্ষ স্তরে নির্দিষ্ট করা থাকে তবে ডিরেক্টরিগুলির সাথে তুলনা করার সময় কেবল তাদের উপস্থিতি রিপোর্ট করে। এর অর্থ patch
এমন ফাইলগুলিতে পরিবর্তনগুলি প্রতিনিধিত্ব করতে পারে না। উদাহরণস্বরূপ, আপনি যদি কোন ফাইলটিকে একটি প্রতীকী লিঙ্কটি নির্দেশ করেন diff
তবে দুটি ফাইলের মধ্যে পার্থক্যকে প্রতীকী লিঙ্কের পরিবর্তে আউটপুট দেয়।
diff
বিশেষভাবে বিশেষ ফাইলগুলিতে পরিবর্তনগুলি বিশেষত প্রতিবেদন করা patch
উচিত এবং এই এক্সটেনশানগুলি বোঝার জন্য এটি বাড়ানো উচিত।
যদি আপনি যা চান তা হ'ল একটি rsync যাচাই করা (এবং সম্ভবত যা অনুপস্থিত রয়েছে তা স্থির করে), তবে আপনি কেবল দ্বিতীয়বারের মতো আরএসএনসি কমান্ড চালাতে পারবেন। আপনি যদি এটি না করতে চান তবে ডিরেক্টরিটি চেক-সংমিশ্রণ পর্যাপ্ত হতে পারে।
আপনি যদি এটির সাথে সত্যিই এটি করতে চান diff
, তবে আপনি find
সিমলিংকগুলি এড়িয়ে যেতে এবং প্রতিটি ফাইলের জন্য পৃথক পৃথকভাবে চালাতে পারেন। আপনার ডিরেক্টরিকে a এবং b আর্গুমেন্ট হিসাবে পাস করুন :
#!/bin/bash
# Skip files in $1 which are symlinks
for f in `find $1/* ! -type l`
do
# Suppress details of differences
diff -rq $f $2/${f##*/}
done
বা এক-লাইনার হিসাবে:
for f in `find a/* ! -type l`;do diff -rq $f b/${f##*/};done
এই ফাইল বিষয়বস্তুতে ভিন্ন বা ফাইল যা হয় শনাক্ত করবে একটি কিন্তু নেই খ ।
মনে রাখবেন যে:
- যেহেতু আমরা symlinks সম্পূর্ণভাবে কুঁদন থাকে, তখন এই যদি সিমবলিক লিঙ্ক নামে উপস্থিত না লক্ষ্য করা হবে না খ । আপনি যে প্রয়োজনীয়, আপনি একটি দ্বিতীয় খোঁজ পাস হবে সব symlinks শনাক্ত করতে তারপর স্পষ্টভাবে তাদের অস্তিত্ব জন্য চেক খ ।
- খ এর অতিরিক্ত ফাইলগুলি চিহ্নিত করা যাবে না, যেহেতু তালিকাটি ক এর বিষয়বস্তু থেকে তৈরি করা হয়েছে । এটি সম্ভবত আপনার
rsync
দৃশ্যের জন্য কোনও সমস্যা নয় ।