নামযুক্ত ফাইল বা ডিরেক্টরিগুলিকে আরএসসিএন-তে পরিচালনা করা


26

আমি rsyncডিরেক্টরি প্রতিলিপি জন্য একটি স্ক্রিপ্ট উপর কাজ করছি । আমার কাছে এটি কেবলমাত্র নতুন এবং পরিবর্তিত ফাইল বা ডিরেক্টরিগুলি সিঙ্ক করছে তবে এটি অনুলিপি করছি না যে এর অনুলিপি ফাইল বা ডিরেক্টরিকে নতুন ফাইল বা ডিরেক্টরি হিসাবে নামকরণ করেছে, ফাইলগুলি সিঙ্কে রাখছে না। আমি ব্যবসায়ের কাজের সময় চলতে থাকায় 1MB এর ব্যান্ডউইথ সীমাও নির্ধারণ করেছি। এখানে আমার স্ক্রিপ্ট:

rsync -zvru --bwlimit=1024  /mymounts/test1/ /mymounts/test2

যদি কেউ কেবল নতুন বা পরিবর্তিত ফাইল অনুলিপি করে কোনও কিছুর নতুন নাম রাখে তবে ফাইল এবং ডিরেক্টরিগুলি কীভাবে সিঙ্কে রাখতে পারি? প্রশ্নযুক্ত ফাইলগুলি এখানে

ls "/mymounts/test1/some stuff"
new directory  newfile1.txt  newfile3.txt  renamedFile.txt

ls "/mymounts/test2/some stuff"
new directory  newfile1.txt  newfile2.txt  newfile3.txt  renamedFile.txt

অথবা একটি উপায় আছে এমনকি অন্য ডাইরেক্টরি বলে নাম পালটে ফাইল সরানো হবে: /mymounts/VerControl?

উত্তর:


23

rsyncউত্স এবং টার্গেট ডিরেক্টরিতে থাকা ফাইল সিস্টেমে হার্ড লিঙ্কগুলির জন্য সমর্থন থাকলে আপনি মুভিড এবং নাম পরিবর্তন করা ফাইলগুলি হ্যান্ডেল করতে পারেন । ধারণাটি হ'ল আসল স্থানান্তরের আগে হার্ড লিঙ্কগুলিকে পুনর্গঠন করতে আরএসসিএনকে দেওয়া উচিত। আপনি এখানে একটি উজ্জ্বল ব্যাখ্যা পেতে পারেন ।

আমরা একটি সহজ সমাধান দিয়ে শেষ করেছি যা উত্স / টার্গেট ডিরেক্টরিতে হার্ড লিঙ্কগুলির একটি লুকানো গাছ তৈরি করে, মূল স্ক্রিপ্টটি এরকম হতে পারে:

# Name of hidden directory
Shadow=".rsync_shadow"

# do real sync
rsync -ahHv --stats --no-inc-recursive --delete --delete-after "$Source"/ "$Target"

# update/create hidden dir of hard links in source
rsync -a --delete --link-dest="$Source" --exclude="/$Shadow" "$Source"/ "$Source/$Shadow"

# update/create hidden dir of hard links in target
rsync -a --delete --link-dest="$Target" --exclude="/$Shadow" "$Target"/ "$Target/$Shadow"

গিটহাবে আমার একটি উদাহরণ স্ক্রিপ্ট রয়েছে । তবে আমি আপনাকে এই পদ্ধতির ব্যবহারের আগে প্রচুর পরিমাণে পরীক্ষা করার পরামর্শ দিচ্ছি।


এছাড়াও আপনি যে "উজ্জ্বল ব্যাখ্যা" এর সাথে লিঙ্ক করেছেন তা এই দুর্দান্ত বুনিয়াদি rsyncনিবন্ধ, FWIW কেও বোঝায় । everythinglinux.org/rsync
JakeGould

19

আপনি -y | --fuzzyrsync বিকল্পটি দেখতে চাইতে পারেন । এগুলি ছাড়া আরএসসিএনসিটির নতুন নামগুলি ট্র্যাক করার কোনও উপায় নেই, সুতরাং আপনি পুনর্নবীকরণকৃত ফাইলটি স্থানান্তর করবেন।

Rsync ম্যানপেজ থেকে:

   -y, --fuzzy
          This option tells rsync that it should look for a basis file for
          any  destination  file  that  is missing.  The current algorithm
          looks in the same directory as the destination file for either a
          file  that  has  an identical size and modified-time, or a simi-
          larly-named file.  If found, rsync uses the fuzzy basis file  to
          try to speed up the transfer.

7
মনে রাখবেন যে, যদি এটি ব্যবহার করা হয় তবে --fuzzyআপনার সাথে এটি সংযুক্ত করার বিষয়টি বিবেচনা করা উচিত --delete-delay, যেমন "ডিফল্টরূপে আরএসআইএনসি একটি করে --delete-before, সুতরাং বেস ফাইলটি অনুলিপি / সরানোর আগে মুছে ফেলা হবে" । সূত্র: সোনিয়া হ্যামিল্টন
রোনান জউচেট

1

আপনি পারবেন না।

রাইকিঙ্কের তিনটি মোড রয়েছে,

  • সমস্ত ফাইল অনুলিপি করুন
  • বিদ্যমান (সংশোধিত / অ-পরিবর্তিত) ফাইলগুলি অনুলিপি করুন - এর উপর আপনার অনেক বিকল্প রয়েছে
  • অ-বিদ্যমান ফাইলগুলি অনুলিপি করুন।

তবে এই তিনটি মোডের দুটি উপশ্রেণী রয়েছে,

  • বাদ দিন
  • অন্তর্ভুক্ত

রাইকিঙ্ক কোন ফাইলের নাম পরিবর্তন করে তা ট্র্যাক করে না, এর কোনও রাজ্য নেই। পরিবর্তে সমস্ত ফাইল অনুলিপি করা এবং আপনার চান না এমন ফাইলগুলি বাদ দিয়ে বিবেচনা করুন । আপনার কাছে শিফটিং-হোয়াইটলিস্ট থাকতে পারে না, আপনার একটি কালো তালিকা হতে পারে।

rsync [..stuff..] --exclude 'lib/'

ইনপুটটির জন্য ধন্যবাদ পেতে হলে পুনরায় নামকরণ করা ফাইলের সাথে থাকতে হবে।
jmituzas

আপনি এটি বিদ্যমান ফাইলগুলি মুছতে পারেন, এটি পুরোপুরি ঠিক। তবে অনুলিপিটির ক্রিয়াকলাপ হিসাবে, আপনি যদি উত্স অনুসারে নতুন নামকরণ করেন তবে এটি নাম পরিবর্তিত ফাইলটি অনুলিপি করবে।
ইভান ক্যারল

আমি সংস্করণগুলি -b এর সাথে রাখতে পারি এবং প্রত্যয়টি সেট date +%Y%m%d%k%M%Sকরতে পারি = যাইহোক আমি প্রত্যয় = date +%Y%m%d%k%M%S.ORIGINALSUFFIX পেতে পারি?
jmituzas

0

আমি যতদূর জানি rsyncফাইলগুলির নাম পরিবর্তন করতে পারে না নতুন ফাইলগুলিকে আবার স্থানান্তর করতে হবে। দেখুন Artyom এর উত্তর।

চলে যাওয়া ফাইলগুলি মুছতে, --deleteবিকল্পটি ব্যবহার নিশ্চিত করে নিন ।

এছাড়াও, মিরর করার জন্য, আমি আপনাকে -a( সংরক্ষণাগার ) ব্যবহার করার পরামর্শ দিচ্ছি , যা কিছু দুর্দান্ত বিকল্পের বিকল্প দেয়।

কটাক্ষপাত আছে man 1 rsyncবিস্তারিত জানার জন্য।


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