কীভাবে সিঙ্ক করবেন তা আরএসএনসি ঠিক কীভাবে সিদ্ধান্ত নেয়?


15

আমি প্রশ্নের একাধিক উত্তর খুঁজে পাচ্ছি, তাই এলোমেলো অর্ধহীন অপ্রয়োজনীয় তথ্য পূরণ করে সর্বাধিক ব্লগ তৈরি করতে চেয়ে বরং প্রকৃতপক্ষে এটি ব্যবহার করা লোকদের জিজ্ঞাসা করতে চেয়েছি।

পরিস্থিতি: আমি rsync -av --progress /dir/a /dir/b এবং এটি কাজ করে।

আমি / dir / a এ নতুন ফাইল যুক্ত করি এবং আবার একই কমান্ডটি চালিত করি, এটি কী করেছে তা জানে এবং কেবলমাত্র নতুন ফাইলগুলি অনুলিপি করে।

আমি / dir / a এ নতুন ফাইল যুক্ত করি এবং / dir / b তে কিছু ফাইলের নাম পরিবর্তন করি এবং খুব কয়েকটি মুছতে পারি।

আমি rsync -av --progress /dir/a /dir/bআবার দৌড়ালে কি কপি হবে? কেবলমাত্র নতুন ফাইল কারণ এটি জানে যে এটি পূর্বে কী অনুলিপি করেছে, বা যে ফাইলগুলি পুনরায় নামকরণ / মুছে ফেলা হয়েছে, সেগুলি এখন আর উপস্থিত নেই।

আর বোনাস হিসাবে, যদি পূর্বে কপি ফাইল হয় আবার কপি, যে রোধ করার জন্য একটি উপায় যে শুধুমাত্র নতুন সংযোজন / Dir / একটি অনুলিপি করা, তাই?

এই মুহুর্তে আমি ম্যানুয়ালি জিনিসগুলি পরীক্ষা করে খুশি, তবে ডেটা বড় হওয়ার সাথে সাথে এই টাস্কটি সম্পাদন করার জন্য আরও অটোমেশন প্রয়োজন।


3
-iপতাকা খুব সুবিধাজনক। প্রতিটি ফাইলের জন্য, এটি একটি ম্যাচের স্ট্রিং দেয় যা এটি কেন মিলে যায় তা দেখতে ডিকোড করা যায় (আধুনিক সময়ের জন্য পতাকা, আকারের জন্য পতাকা ইত্যাদি)
বোলঅফ্রেড

উত্তর:


17

আমি / dir / a এ নতুন ফাইল যুক্ত করি এবং আবার একই কমান্ডটি চালিত করি, এটি কী করেছে তা জানে এবং কেবলমাত্র নতুন ফাইলগুলি অনুলিপি করে।

না, এটি আগের রানে কী করেছিল তা জানে না। এটি প্রেরণের জন্য প্রাপ্ত প্রাপ্ত দিকের ডেটার সাথে তুলনা করে। অল্প পরিমাণে ডেটা সহ, এটি সুস্পষ্ট হবে না, তবে যখন আপনার যথেষ্ট পরিমাণে ডিরেক্টরি রয়েছে তখন অনুলিপিটি শুরু করার আগে তুলনা করার সময়টি সহজেই অনুভূত হয়।

ডিফল্ট চেক ফাইল পরিবর্তনের সময় এবং মাপের জন্য। থেকে man rsync:

-c, --checksum
      This changes the way rsync checks if the files have been changed
      and  are in need of a transfer.  Without this option, rsync uses
      a "quick check" that (by default) checks if each file’s size and
      time of last modification match between the sender and receiver.
      This option changes this to compare a 128-bit checksum for  each
      file  that  has a matching size.  Generating the checksums means
      that both sides will expend a lot of disk I/O  reading  all  the
      data  in  the  files  in  the transfer (and this is prior to any
      reading that will be done to transfer changed  files),  so  this
      can slow things down significantly.

এবং:

-u, --update
      This  forces  rsync  to  skip  any  files  which  exist  on  the
      destination  and  have  a  modified  time that is newer than the
      source  file.   (If  an  existing   destination   file   has   a
      modification time equal to the source file’s, it will be updated
      if the sizes are different.)

নোট করুন যে এগুলি আপনার ব্যবহৃত বিকল্পগুলির দ্বারা বোঝানো হয়নি। -aহল:

-a, --archive               archive mode; same as -rlptgoD (no -H)
-r, --recursive             recurse into directories
-l, --links                 copy symlinks as symlinks
-p, --perms                 preserve permissions
-o, --owner                 preserve owner (super-user only)
-g, --group                 preserve group
    --devices               preserve device files (super-user only)
    --specials              preserve special files
-D                          same as --devices --specials
-t, --times                 preserve times

সেরা বর্ণনা আমি (এখনও অবধি) দেখেছি, আপনাকে ধন্যবাদ
SPooKYiNeSS

2
একটু সংযোজন। নামকরণ করা ফাইলগুলি উভয় প্রান্তে অনন্য ফাইল হিসাবে বিবেচিত হয়। --fuzzyএকবারে নির্দিষ্ট করা তাদের একই ডিরেক্টরিতে একই হিসাবে চিহ্নিত করবে। --fuzzyদুবার ব্যবহার করা এই ক্ষমতাটি অন্য স্থানে প্রসারিত করে । দেখুন man rsyncবিস্তারিত জানার জন্য। অবশ্যই, ব্যবহারের মূল কারণগুলির rsyncমধ্যে একটি হ'ল পরিবর্তিত কোনও ফাইলের কেবলমাত্র অংশগুলি অনুলিপি করার ক্ষমতা। এটি কোনও নেটওয়ার্কের মাধ্যমে অনেক দ্রুত স্থানান্তর করতে পারে। বিটিডাব্লু, চেকসাম বিকল্পটি কীভাবে rsyncকাজ করে তার ব্যাখ্যার জন্য উপরে উল্লিখিত হয়েছে । বেশিরভাগ ক্ষেত্রে, এটি ব্যবহার করা উচিত নয়।
জো

6

সাধারণ

যদি আমি সঠিকভাবে বুঝতে পারি তবে rsync -avএর কোনও স্মৃতি নেই, সুতরাং এটি ফাইলগুলি অনুলিপি / মুছে ফেলাও অনুলিপি করবে, কারণ তারা উত্সে উপস্থিত তবে লক্ষ্যমাত্রায় আর উপস্থিত নেই present

পরামর্শ

  • -nআপনি rsyncকমান্ড লাইন চালানোর আগে কী ঘটে তা যাচাই করতে 'ড্রাই ড্রাই' বিকল্পটি ব্যবহার করুন ।

  • উত্স ডিরেক্টরি পরে একটি পিছনে স্ল্যাশ এর বিশেষ অর্থ লক্ষ্য করুন, এবং এর মধ্যে পার্থক্য দেখুন

    rsync -av --progress dir/a/ dir/b
    

    এবং

    rsync -av --progress dir/a dir/b
    

    যা ম্যানুয়ালটিতে বর্ণিত হয়েছে man rsync

উদাহরণ

আপনার বিশেষ কেস (উত্স ডিরেক্টরি 'এ' তে একটি ফাইল যুক্ত করা এবং লক্ষ্য ডিরেক্টরি 'বি' থেকে একটি ফাইল সরিয়ে নেওয়া) যোগ করা ফাইল এবং আগের অনুলিপি ফাইল উভয়ই যুক্ত করবে, কারণ এটি এখনও উত্স ডিরেক্টরিতে রয়েছে। এটি বিকল্পের সাথে এবং ছাড়া উভয়ই ঘটবে এবং আপনি যদি সোর্স ডিরেক্টরিতে রাখতে চান তবে সহজেই এটি ঠিক করার -uকোনও বিকল্প আমি জানি না rsync

তবে আপনি এটিকে উত্স ডিরেক্টরি থেকে মুছে ফেলতে পারেন বা ফাইলটির নাম ফাইলটিতে রাখতে excludedপারেন এবং বিকল্পটি --exclude-from=excluded(অনেকগুলি ফাইলের জন্য) অথবা কেবলমাত্র --exclude=PATTERNএক বা কয়েকটি ফাইলের জন্য ব্যবহার করতে পারেন।

$ rsync -avn --progress dir/a/ dir/b
sending incremental file list
./
file-1
file-2

sent 103 bytes  received 25 bytes  256.00 bytes/sec
total size is 13  speedup is 0.10 (DRY RUN)

$ rsync -av --progress dir/a/ dir/b
sending incremental file list
./
file-1
              6 100%    0.00kB/s    0:00:00 (xfr#1, to-chk=1/3)
file-2
              7 100%    6.84kB/s    0:00:00 (xfr#2, to-chk=0/3)

sent 196 bytes  received 57 bytes  506.00 bytes/sec
total size is 13  speedup is 0.05

$ echo textx-3>./dir/a/file-3

$ rsync -avn --progress dir/a/ dir/b
sending incremental file list
./
file-3

sent 121 bytes  received 22 bytes  286.00 bytes/sec
total size is 21  speedup is 0.15 (DRY RUN)

$ rm dir/b/file-1 
rm: ta bort normal fil 'dir/b/file-1'? y

$ rsync -avn --progress dir/a/ dir/b
sending incremental file list
./
file-1
file-3

sent 124 bytes  received 25 bytes  298.00 bytes/sec
total size is 21  speedup is 0.14 (DRY RUN)

$ rsync -avun --progress dir/a/ dir/b
sending incremental file list
./
file-1
file-3

sent 124 bytes  received 25 bytes  298.00 bytes/sec
total size is 21  speedup is 0.14 (DRY RUN)

$ rsync -avun --exclude=file-1 --progress dir/a/ dir/b
sending incremental file list
./
file-3

sent 104 bytes  received 22 bytes  252.00 bytes/sec
total size is 15  speedup is 0.12 (DRY RUN)

বিকল্প: unison

আপনি সেই সরঞ্জামটি পরীক্ষা করতে চাইতে পারেন unisonযা একটি সিঙ্ক্রোনাইজ করার সরঞ্জাম। এটি বিশেষ কেসগুলি সনাক্ত করতে এবং কী করবে তা সিদ্ধান্ত নেওয়ার জন্য একটি ভিজ্যুয়াল পদ্ধতি সরবরাহ করে। একটি জিইউআই সংস্করণ রয়েছে ( unison-gtk)।


সুন্দর উদাহরণ ধন্যবাদ। আমি শেষের দিকে / জানতাম, আমি কেবল অ্যাপটি থেকে এটি জিজ্ঞাসা করেছি এবং এটি মিস করেছি (এবং আপনি স্পষ্টভাবে দেখতে পাচ্ছেন যে আমি কেবল অনুলিপি / পোস্ট করেছি
SPooKYiNeSS

আমি শেষ করার আগে আবার এটি প্রেরণ করে এবং আমার মন্তব্যটি আমাকে সম্পাদনা করতে দেয় না ... দ্বিতীয়টি অনুলিপি / আটকানো হয়েছে। আমি অব্যবস্থার দিকে একবার নজর দেব এবং আমি যা চাই তা এটি করতে পারে কিনা তা দেখুন, এবং না হলে আমি খ পরিকল্পনা করে ফিরে গিয়ে একটি স্ক্রিপ্ট তৈরি করব
SPooKYiNeSS

আমি unison-gtkবেশ কয়েক বছর ধরে ব্যবহার করে আসছি এবং এতে আমি খুশি। (আমিও ব্যবহার rsyncকরি))
সুডোডাস

1

এটি কেবলমাত্র / dir / এ নতুন ফাইলগুলি অনুলিপি করে। আপনি / ডির / বি তে যা কিছু করুন তা উপেক্ষা করা হবে, আপনি যদি না --delet বিকল্পটি ব্যবহার করেন। সেক্ষেত্রে / dir / b এ নাম পরিবর্তন করা ফাইল মুছে ফেলা হবে। এটি / দির / বিটিকে ঠিক / dir / a এর মতো হতে বাধ্য করবে।

বোনাস সম্পর্কে, আপনার কি বোঝার মতো / dir / a তে ফাইলের নাম পরিবর্তন করে, এবং তারপরে / dir / b তে সংযুক্তি দেওয়া উচিত? সে ক্ষেত্রে আরএসসিএনকে কেবল ফাইলগুলি অনুলিপি করা থেকে বিরত করার কোনও উপায় আছে বলে আমি মনে করি না।


আমি নির্ধারণের জন্য কোনও অ্যাট্রিবিউট ব্যবহার করা ছাড়া অন্য কোনও উপায় হওয়ার প্রত্যাশা করিনি, তবে তারপরে যদি একটি কিডি স্ক্রিপ্ট তৈরি করা হয় এবং এর দরকার নেই। যদিও আপনার উত্তরের জন্য আপনাকে ধন্যবাদ, কমপক্ষে আমি এখন জানি আমার কী করা দরকার।
SPooKYiNeSS
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.