(পুনরাবৃত্ত) ডিরেক্টরি কপি অভিন্ন কিনা তা পরীক্ষা করে দেখুন


0

আমাকে মাঝে মাঝে একটি কম্পিউটার থেকে অন্য কম্পিউটারে ডিরেক্টরি কাঠামোতে প্রচুর পরিমাণে ডেটা কপি / সিঙ্ক করতে হয়। এই উদ্দেশ্যে আমি যে সাধারণ প্রোগ্রামগুলি ব্যবহার করি তা হ'ল আরএসসিএন, সিঙ্কিং বা সিফাইল।

অনুলিপিভাবে অনুলিপি / সিঙ্ক প্রোগ্রামের (বা আমার দ্বারা নির্বাচিত বিকল্পগুলি) উপর নির্ভর না করার জন্য, আমি সাধারণত cfvপ্যারেন্ট ডিরেক্টরিতে একটি চেকসাম ফাইল (ব্যবহার করে ) উত্পন্ন করি এবং ডেটা দিয়ে এটি অনুলিপি / সিঙ্ক করি, তাই আমি পরে সমস্ত কিছু পরীক্ষা করতে পারি গন্তব্য কম্পিউটারে ঠিক আছে। উদাহরণস্বরূপ, cfvউত্স থেকে সমস্ত ফাইল নিরাপদে এসেছে কিনা তা দেখতে ভাল কাজ করে।

যাইহোক, একটি অপশন যা আমি মিস করছি তা হ'ল অনুলিপিটিতে এমন কোনও ফাইল রয়েছে কিনা যা মূলতে ছিল না। আমি যতদূর বলতে পারি, cfvএই জাতীয় "অতিরিক্ত" ফাইলগুলির সন্ধান করার কোনও বিকল্প নেই। আমি যে সমাধানটি অবলম্বন করি তা হ'ল অনুলিপিটির জন্য একটি নতুন চেকসাম ফাইল তৈরি করা এবং এটি মূলটির সাথে তুলনা করা, তবে এর অর্থ প্রতিটি ফাইলের চেকসাম চারবার গণনা করতে হবে (উভয় কম্পিউটারে উত্পন্ন করা ও পরীক্ষা করা)।

এর চেয়ে ভাল সমাধান কি আছে?

উত্তর:


2

আপনি যদি কেবলমাত্র "অতিরিক্ত" ফাইলগুলি সনাক্ত করতে চান তবে কম্পিউটিং চেকসামগুলি আমার কাছে ওভারকিলের মতো দেখাচ্ছে। আপনার আসল তথ্য (ফাইলের সামগ্রী) পরীক্ষা করার দরকার নেই; আপনার মেটাডেটা (বিদ্যমান পাথ) পরীক্ষা করতে হবে।

ভিতরে সমস্ত আপেক্ষিক পাথ পেতে /synced/dir, চালান

(cd /synced/dir && find . | sort) > structure.txt

এটি উভয় পক্ষেই করুন, তারপরে diffফলাফল ফাইলগুলি। পরিস্থিতিটি প্রতিসাম্যযুক্ত নোট করুন, সুতরাং আপনি "অতিরিক্ত" পাশাপাশি যে কোনও দিকে "নিখোঁজ" ফাইলগুলি সনাক্ত করতে পারবেন (এখানে "অতিরিক্ত" সেখানে "অনুপস্থিত" সমতুল্য এবং বিপরীতে)।

"অতিরিক্ত" ফাইলগুলি এক (বা অন্য) দিকে অগ্রাহ্য করতে, (বা যথাক্রমে) diffদিয়ে আউটপুট ফিল্টার করুন ।grep '^>'grep '^<'

দুটি ডিরেক্টরি যদি একটি সিস্টেমে উপলব্ধ (মাউন্ট করা) হয় তবে এই ব্যাশ বাক্য গঠনটি কার্যকর হতে পারে:

diff <(cd /original/dir && find . | sort) <(cd /backup/dir && find . | sort) | grep '^>'

এটি সম্পূর্ণ দৃust় নয় (উদাহরণস্বরূপ ফাইলনামগুলিতে থাকা নিউলাইনগুলি যুক্তি ভাঙ্গতে পারে), ধারণাটি প্রমাণের মতো আমার উদাহরণটিকে আরও আচরণ করুন more মুল বক্তব্যটি হ'ল আপনি অতিরিক্ত ফাইলগুলি ফাইলের বিষয়বস্তু না পড়েই সনাক্ত করে নিন।

নোট:

  • sortfindডিরেক্টরিগুলি হুবহু অনুলিপি থাকলেও দ্বি- বিভাগগুলি বিভিন্ন ক্রমে প্রবেশগুলি ফিরিয়ে দিতে পারে বলে প্রয়োজনীয় ;
  • একমাত্র diffডিরেক্টরিগুলির তুলনা করতে পারে তবে এই মোডটি এখানে দরকারী নয় কারণ এটি সংশ্লিষ্ট ফাইলগুলির বিষয়বস্তুর তুলনা করার চেষ্টা করে, এই আচরণটি আমরা প্রথমে এড়াতে চাই।

ধন্যবাদ! এবং গ্রহণযোগ্যতা এবং এরপরে অগ্রহণযোগ্যতার জন্য দুঃখিত, কিন্তু আপনার উত্তর আমাকে আরও অনুপ্রাণিত করেছিল কীভাবে এটি আরও বেশি সুচিন্তিত করা যায়। আমার উত্তর দেখুন।
এ। ডোন্ডা

0

কামিল ম্যাকিয়েরোস্কির উত্তর খুব ভাল, তবে আমি মনে করি যে নিম্নলিখিত সমাধানের সাথে তার সমাধান প্রশ্নের সমাধানে প্রাসঙ্গিকভাবে প্রবাহিত করা যেতে পারে:

1) উত্স উপর একটি চেকসাম ফাইল তৈরি করুন। এখানে একটি বাশ স্ক্রিপ্ট রয়েছে যা এটি ব্যবহার করে cfv:

#!/bin/bash

# create md5 checksum file for all files in the current directory tree

# filename for checksum file
FN="${PWD##*/}.md5"

# create checksum file
cfv -rr -C -L -t md5 -f $FN

এটি বর্তমান ডিরেক্টরি থেকে শুরু হয়, প্রতীকী লিঙ্কগুলি অনুসরণ না করে পুনরাবৃত্তভাবে অবতরণ করে এবং বর্তমান ডিরেক্টরিতে একটি একক চেকসাম ফাইল তৈরি করে।

2) উত্স থেকে গন্তব্য সিঙ্ক / অনুলিপি।

3) (ব্যবহার গন্তব্য উপর চেকসাম ফাইলটি পরীক্ষা cfv), এবং ব্যবহার অতিরিক্ত ফাইলগুলি সন্ধান find, sortএবং comm:

#!/bin/bash

# test md5 checksum file w.r.t. all files in the current directory tree

# filename for checksum file
FN="${PWD##*/}.md5"

# test checksum file
cfv -T -f $FN

# check whether there are additional files
echo ----------- additional files -----------
CHECK=`tempfile`
sed  's .\{34\}  ' $FN | sort > $CHECK
LOCAL=`tempfile`
find -P -type f -printf '%P\n' | sort > $LOCAL
comm -13 $CHECK $LOCAL

কামিল ম্যাকিয়েরোস্কির উত্তরের পার্থক্য হ'ল আমি উত্সটির জন্য পৃথক ফাইল তালিকা তৈরি করি না, তবে চেকসাম ফাইলটিতে ফাইলের নাম ব্যবহার করি, যা মাধ্যমে বের করা হয় sed। এটি ধরে নিয়েছে যে চেকসাম ফাইলটি স্ট্যান্ডার্ড md5sumফর্ম্যাটে: 32 অক্ষর চেকসাম, স্থান, '*' বা '' বাইনারি / পাঠ্য মোড, ফাইলের নাম নির্দেশ করতে।

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