বিকল্প 1: সময়মতো ফিরে যান এবং এটি পড়ুন: http://lincolnloop.com/blog/2012/jan/6/detecting-file-moves-renames-rsync/
এই অপারেশনটি অনুকূলকরণের জন্য হার্ডলিঙ্কগুলি সহ একটি কৌশল ব্যবহার করে (সাবধানে নোট করুন উদাহরণস্বরূপ "/" অনুসরণ করার বাদ দিলেও, এটি আপনার ব্যবহারের চেয়ে আলাদা হতে পারে)। যদি আপনার কাছে পুনর্গঠনের পূর্বে একটি স্থানীয় ব্যাকআপ অনুলিপি থাকে, আপনি সম্ভবত এটি পুনরুদ্ধার করতে এবং ব্যবহার করতে পারেন (জটিলতাটি হার্ডলিংক অনুলিপি প্রয়োজনীয়ভাবে তৈরি করতে সক্ষম হচ্ছে)।
বিকল্প 2: আপনার যদি আপনার ফাইল বা ডিরেক্টরিগুলির নামগুলিতে কোনও ফাঁকা / কোট না থাকে এবং কোনও নকল রাখার ইচ্ছা না থাকে তবে আপনি এটির মতো একটি দ্রুত এবং নোংরা অনুলিপি / পুনর্নবীকরণ স্ক্রিপ্ট তৈরি করতে পারেন।
উত্স উপর:
cd /wherever
find . -type f | xargs sha1sum | sort > /tmp/src.out
গন্তব্যস্থলে
cd /wherever
find . -type f | xargs sha1sum | sort > /tmp/dst.out
dst.out
উত্স থেকে ফাইল অনুলিপি করুন , এবং তারপরে উত্স থেকে:
join -j 1 /tmp/src.out /tmp/dst.out | while read sum src dst; do
if [ "$src" != "$dst" ]; then
echo mkdir -p $(dirname "$src")
echo cp -ipl "$dst" "$src"
fi
done > fixup.sh
এটি mkdir/cp
কমান্ডের একটি সেট আউটপুট দেবে যা আপনি fixup.sh
গন্তব্যে আপনার অনুলির শীর্ষ ডিরেক্টরিতে ( ) চালাতে পারেন । স্ক্রিপ্ট আউটপুট আপনার যা করার প্রয়োজন তা করবে তা নিশ্চিত করুন । cp -ipl
অনুরোধ ছাড়াই ওভাররাইট করা হবে না, এবং হার্ড লিঙ্কিং দ্বারা অনুলিপি করা হবে। পরবর্তী rsync --delete ...
পুরাতন ফাইল মুছে দিন ভেবে যে তারা একটি অভিন্ন কপি চান। rsync --dry-run ...
পরবর্তী কোনও পার্থক্যের মাত্রা নিশ্চিত করতে ব্যবহার করুন ।
( সদৃশ এবং ক্লিনআপ সংরক্ষণ করে mv -i
অ-ধ্বংসাত্মক " cp -ipl
" এর পরিবর্তে " " ব্যবহার করা সম্ভব ))
আপনার যদি সমস্যাযুক্ত ফাইল / ডিরেক্টরি নামগুলি থাকে তবে আপনাকে ফাইলের নামগুলির কিছু মধ্যবর্তী প্রক্রিয়াজাতকরণ করতে হবে, বা সমাধানগুলির একটি এখানে চেষ্টা করতে হবে: https://unix.stackexchange.com/questions/6411/any-way-to-sync -directory-কাঠামো-যখন-ফাইল-হয়-ইতিমধ্যে-অন-উভয়-পক্ষের
আপডেট:
আপনি যদি sed
কমান্ড লাইনের জন্য যায় এমন বিরাম-বিহীন-কারখানার বিস্ফোরণ সহ্য করতে পারেন :
find . -type f -print0 | xargs -0 sha1sum |
sed -re $'s/(^[0-9a-z]*) /\\1__/;
s/ /\\\\x20/g; s/\'/\\\\\'/g;
s/(^[0-9a-z]*)__/\\1 /;
s/ (.*)$/ $\'\\1\'/g;'
এটি স্পেস এবং একক / ডাবল উদ্ধৃতিগুলি হ্যান্ডেল করবে (যদিও আমরা perl
সঠিক ভারী উত্তোলনের জন্য অঞ্চলে পৌঁছাচ্ছি)। এটি ঝামেলার $''
স্ট্রিং উদ্ধৃত করার জন্য বাশ নির্মাণ ব্যবহার করে।