কমান্ড লাইন সরঞ্জামগুলির সাথে কীভাবে দুটি ফোল্ডার সিঙ্ক করবেন?


63

উইন্ডোজ থেকে লিনাক্সে স্থানান্তরিত হয়ে, আমি উইনমার্জের বিকল্প সফ্টওয়্যার খুঁজতে বা লিনাক্সে দুটি ফোল্ডার তুলনা এবং সিঙ্ক করার জন্য কমান্ড লাইন সরঞ্জামগুলি শিখতে চাই। কমান্ড লাইনে নিম্নলিখিত কাজগুলি কীভাবে করা যায় তা যদি আপনি আমাকে বলতে পারতেন তবে আমি কৃতজ্ঞ হব ... (আমি ডিফ এবং আরএসসিএনসি নিয়ে পড়াশোনা করেছি, তবে আমার এখনও কিছুটা সাহায্য দরকার।)

আমাদের দুটি ফোল্ডার রয়েছে: "/ হোম / ইউজার / এ" এবং "/ হোম / ইউজার / বি"

ফোল্ডার এ হ'ল জায়গা যেখানে নিয়মিত ফাইল এবং ফোল্ডারগুলি সংরক্ষণ করা হয় এবং ফোল্ডার বি একটি একটি ব্যাকআপ ফোল্ডার যা ফোল্ডার এ এর ​​সম্পূর্ণ আয়না হিসাবে কাজ করে folder (ফোল্ডার বিতে ব্যবহারকারী কোনও কিছুই সরাসরি সংরক্ষণ বা পরিবর্তন করেনি)

আমার প্রশ্নগুলি হ'ল:

  • কেবলমাত্র ফ ফোল্ডারে থাকা ফাইলগুলি কীভাবে তালিকাভুক্ত করবেন? (যেমন শেষ সিঙ্ক্রোনাইজেশন থেকে ফোল্ডার এ থেকে মুছে ফেলা হয়েছে))

  • কেবলমাত্র ফোল্ডার বিতে থাকা ফাইলগুলি কীভাবে ফোল্ডার এ এ ফিরে আসবেন?

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

  • ফোল্ডার এ এর ​​সঠিক কপি ফোল্ডার বি তে কীভাবে করবেন? আমার অর্থ, ফোল্ডার এ থেকে সমস্ত কিছু অনুলিপি করুন ফোল্ডার বিতে যা কেবলমাত্র ফোল্ডার এ-তে বিদ্যমান রয়েছে এবং কেবলমাত্র ফোল্ডার বিতে বিদ্যমান ফোল্ডার বি থেকে সমস্ত কিছু মুছুন, তবে উভয় ফোল্ডারে একই ফাইলগুলিকে স্পর্শ না করে।


কেন এই জন্য একটি সঠিক ব্যাকআপ প্রোগ্রাম ব্যবহার করবেন না? সদৃশ একটি উদাহরণ।
কুদিত

উত্তর:


88

এটি ফোল্ডার এ বি ফোল্ডারে রাখে:

rsync -avu --delete "/home/user/A" "/home/user/B"  

আপনি যদি চান যে A এবং B ফোল্ডারগুলির বিষয়বস্তু একই থাকে /home/user/A/তবে উত্স হিসাবে (স্ল্যাশ সহ) রাখুন। এটি A ফোল্ডারটি নেয় না তবে এর সমস্ত বিষয়বস্তু নিয়ে যায় এবং এটি ফোল্ডার বিতে রাখে Like এটি পছন্দ করুন:

rsync -avu --delete "/home/user/A/" "/home/user/B"
  • -a সমস্ত ফাইল সিস্টেমের বৈশিষ্ট্য সংরক্ষণ করে সিঙ্ক করুন
  • -v ভার্বোসলি চালান
  • -u কেবলমাত্র নতুন পরিবর্তনের সময়ের সাথে ফাইলগুলি অনুলিপি করুন (বা সময়ের সমান হলে আকারের পার্থক্য)
  • --delete টার্গেট ফোল্ডারে থাকা ফাইলগুলি মুছুন যা উত্সটিতে নেই

মানচিত্র: https://download.samba.org/pub/rsync/rsync.html


7
rsync : চালান rsync অ্যাপ্লিকেশন, -a : সমস্ত ফাইল সিস্টেমের বৈশিষ্ট্য সংরক্ষণ করে সিঙ্ক করুন, -v : ভার্চুয়ালি চালান, -z : সিঙ্কের সময় ডেটা সংকোচ করুন (সংকুচিত মোডায় ডেটা পরিবহন করুন) - মুছে ফেলা: লক্ষ্যবস্তুতে ফাইলগুলি মুছুন
উত্সটিতে

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

6
Rsync মূলত বিভিন্ন কম্পিউটারের মধ্যে ফাইলগুলি অনুলিপি করা বোঝানো হয়, যেমন এখানে ব্যাখ্যা করা হয়েছে এটি ডিরেক্টরিগুলিও সিঙ্ক করার উদ্দেশ্যে কাজ করতে পারে। সুতরাং -z বিকল্পটি নেটওয়ার্ক ট্র্যাফিক হ্রাস করার জন্য আকর্ষণীয় এবং এইভাবে 2 কম্পিউটারের মধ্যে একটি রাইসাইঙ্কের কার্যকারিতা বাড়িয়ে তুলবে: (ডিস্ক থেকে ডেটা পড়ুন -> কমপ্রেস করুন) === নেটওয়ার্ক === (ডিসপ্লেতে সঙ্কলন -> লিখন) - একই হোস্টে 2 ডিরেক্টরি সিঙ্ক করতে z হ'ল কিছুটা নির্বোধ এবং সিপিইউ চক্রের অপচয় হিসাবে আপনি পাবেন (ডিস্ক থেকে ডেটা পড়ুন -> সংক্ষেপণ -> সঙ্কুচিত করুন -> ডিস্কে লিখুন)
GerritCap

@ জেরিটক্যাপ, আমি একটি সম্পাদনা করেছি, আপনার মূল্যবান
ইনপুটটির

1
আমি কমান্ডটি চেষ্টা করেছি তবে এটি /home/user/B/Aএ এর লিখিত সামগ্রীতে বি এর সামগ্রীতে ওভাররাইটের পরিবর্তে একটি সাব-ডির তৈরি করেছে । আপনি এটি আমাকে দেখতে সাহায্য করতে পারেন?
লুক

10

আপনি unisonইউ পেন এ বেনিয়ামিন পিয়ার্স দ্বারা সরঞ্জাম বিকাশ করতে পারে ।

আমাদের ধরে নেওয়া যাক আপনার দুটি ডিরেক্টরি রয়েছে,

/home/user/Documents/dirA/ এবং /home/user/Documents/dirB/

এই দুটি সিঙ্ক্রোনাইজ করতে আপনি ব্যবহার করতে পারেন:

~ $unison -ui text /home/user/Documents/dirA/ /home/user/Documents/dirB/

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

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

আরও এই বিষয়ে: ইউনিয়ন ব্যবহারকারীর ডকুমেন্টেশনে ইউনিসন টিউটোরিয়াল


1

টাক্সফোরএফের উত্তরটি বেশ ভাল, তবে আমি -cস্থানীয়ভাবে সিঙ্ক করার সময় আপনাকে ব্যবহার করার দৃ strongly় পরামর্শ দিচ্ছি । আপনি তর্ক করতে পারেন যে রিমোট সিঙ্কের জন্য এটি করা সময় / নেটওয়ার্ক পেনাল্টিটির পক্ষে উপযুক্ত নয়, তবে স্থানীয় ফাইলগুলির জন্য এটি সম্পূর্ণরূপে মূল্যবান কারণ গতিটি এত দুর্দান্ত।

-c, --checksum
       This forces the sender to checksum every regular file using a 128-bit  MD4
       checksum.   It  does this during the initial file-system scan as it builds
       the list of all available files. The receiver then checksums  its  version
       of  each  file  (if  it exists and it has the same size as its sender-side
       counterpart) in order to decide which files need to be updated: files with
       either  a  changed  size  or a changed checksum are selected for transfer.
       Since this whole-file checksumming of all files on both sides of the  con-
       nection  occurs  in  addition to the automatic checksum verifications that
       occur during a file's transfer, this option can be quite slow.

       Note that rsync always verifies that each transferred file  was  correctly
       reconstructed  on  the receiving side by checking its whole-file checksum,
       but that automatic after-the-transfer verification has nothing to do  with
       this  option's  before-the-transfer  "Does  this file need to be updated?"
       check.

এটি দেখায় যে একই আকার এবং সময়ের স্ট্যাম্পগুলি কীভাবে আপনাকে ব্যর্থ করতে পারে।

সেটআপ

$ cd /tmp

$ mkdir -p {A,b}/1/2/{3,4}

$ echo "\___________from A" | \
      tee A/1/2/x  | tee A/1/2/3/y  | tee A/1/2/4/z  | \
  tr A b | \
      tee b/1/2/x  | tee b/1/2/3/y  | tee b/1/2/4/z  | \
      tee b/1/2/x0 | tee b/1/2/3/y0 >     b/1/2/4/z0

$ find A b -type f | xargs -I% sh -c "echo %; cat %;"
A/1/2/3/y
\___________from A
A/1/2/4/z
\___________from A
A/1/2/x
\___________from A
b/1/2/3/y
\___________from b
b/1/2/3/y0
\___________from b
b/1/2/4/z
\___________from b
b/1/2/4/z0
\___________from b
b/1/2/x
\___________from b
b/1/2/x0
\___________from b

আরএসসিএনসি যা কিছুই অনুলিপি করে না কারণ সমস্ত ফাইলের আকার এবং টাইমস্ট্যাম্প থাকে

$ rsync -avu A/ b
building file list ... done

sent 138 bytes  received 20 bytes  316.00 bytes/sec
total size is 57  speedup is 0.36

$ find A b -type f | xargs -I% sh -c "echo %; cat %;"
A/1/2/3/y
\___________from A
A/1/2/4/z
\___________from A
A/1/2/x
\___________from A
b/1/2/3/y
\___________from b
b/1/2/3/y0
\___________from b
b/1/2/4/z
\___________from b
b/1/2/4/z0
\___________from b
b/1/2/x
\___________from b
b/1/2/x0
\___________from b    

Rsync যা সঠিকভাবে কাজ করে কারণ এটি চেকসামের তুলনা করে

$ rsync -cavu A/ b
building file list ... done
1/2/x
1/2/3/y
1/2/4/z

sent 381 bytes  received 86 bytes  934.00 bytes/sec
total size is 57  speedup is 0.12

$ find A b -type f | xargs -I% sh -c "echo %; cat %;"
A/1/2/3/y
\___________from A
A/1/2/4/z
\___________from A
A/1/2/x
\___________from A
b/1/2/3/y
\___________from A
b/1/2/3/y0
\___________from b
b/1/2/4/z
\___________from A
b/1/2/4/z0
\___________from b
b/1/2/x
\___________from A
b/1/2/x0
\___________from b

-c এবং -u একসাথে ভাল কাজ করে?
সের্গেই কোরঝভ

@ সের্গে কার্জভ এটি করেন। Destination -u 'এখনও গন্তব্য আরও নতুন না হলে আপডেট করার জন্য যথারীতি কাজ করে।
ব্রুনো ব্রোনোস্কি

1

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

rsync -rtu --delete --info=del,name,stats2 "/home/<user>/<src>/" "/run/media/<user>/<drive>/<dst>"

থেকে rsync man পৃষ্ঠা :

-r, --recursive
এটি rsync কে ডিরেক্টরিগুলি পুনরাবৃত্তভাবে অনুলিপি করতে বলে।

-টি, - টাইমস
এটি আরএসসিএনকে ফাইলগুলি সহ সংশোধন বার স্থানান্তর করতে এবং রিমোট সিস্টেমে আপডেট করার জন্য বলে tells

-u, --update
গন্তব্যস্থলে বিদ্যমান যে কোনও ফাইল এড়ানোর জন্য সোর্স ফাইলের চেয়ে নতুনতর পরিবর্তিত সময় থাকতে এই RSSyncকে বাধ্য করে। (যদি কোনও বিদ্যমান গন্তব্য ফাইলে উত্স ফাইলের সমান পরিবর্তনের সময় থাকে তবে আকারগুলি পৃথক হলে তা আপডেট হবে))

--delete
এটি আরএসসিএনকে প্রেরণকারী পক্ষ থেকে বহিরাগত ফাইলগুলি মুছে ফেলার জন্য বলে (প্রেরণকারী পক্ষের নয়), তবে কেবল যে ডিরেক্টরিগুলি সিঙ্ক্রোনাইজ করা হচ্ছে তাদের জন্য।

--info = FLAGS
এই বিকল্পের সাহায্যে আপনি যে তথ্যটি দেখতে চান তার উপর সূক্ষ্ম কন্ট্রোল থাকতে পারে lets

থেকে rsync --info=help

DEL        Mention deletions on the receiving side  
NAME       Mention 1) updated file/dir names, 2) unchanged names  
STATS      Mention statistics at end of run (levels 1-3)

কম স্পষ্ট হলেও এটি আপাতদৃষ্টিতে সমতুল্য এবং খাটো:

rsync -rtuv --delete --info=stats2 "/home/<user>/<src>/" "/run/media/<user>/<drive>/<dst>"

-v, --verbose
একটি একক -v আপনাকে কী ফাইল স্থানান্তরিত হচ্ছে সে সম্পর্কিত তথ্য এবং শেষে একটি সংক্ষিপ্তসার [স্ট্যাটাস 1] দেবে।


0

এটি আপনি যা চেয়েছিলেন তা সম্পূর্ণরূপে নয়, তবে আপনি কোনও সংস্করণ-নিয়ন্ত্রণ সরঞ্জাম ব্যবহার করে বিবেচনা করতে পারেন। গিটের মতো সরঞ্জামগুলি আপনার কাছে যা বলা হয় তা করে এবং আরও বেশি করে, বিশেষত আপনি যদি সরাসরি ফোল্ডার বিতে কাজ না করেন তবে এটি একবার নজর দেওয়া আকর্ষণীয় হতে পারে। আপনি এখানে গিট উপর আরও কিছু তথ্য পেতে পারেন


2
আপনি কেবল সংস্করণ নিয়ন্ত্রণে সমস্ত কিছু যুক্ত করতে ইচ্ছুক হলে এটি কাজ করে। এটি স্থায়ীভাবে সংরক্ষণের প্রতিশ্রুতিবদ্ধ প্রতিটি পরিবর্তনকেও বাধ্য করে, যা অযাচিত হতে পারে।
কুদিত

@ কুডিট, এটি সত্য, যদিও ইতিহাস সীমাবদ্ধ করার জন্য ক্লোনিংয়ের মাধ্যমে এটি সম্ভব, তবে গিটে ডিফল্টরূপে ইতিহাসকে সীমাবদ্ধ করা (এখনও?) কার্যকর করা যায় না।
সুইচ 87

@ সুইচ ৮87 হ্যাঁ, আমি জানি আপনি পুরানো কমিটগুলি মুছতে পারেন। যদিও জেনেরিক ব্যাকআপ ইমোগুলির জন্য সংস্করণ নিয়ন্ত্রণ সত্যই উপযুক্ত সমাধান নয়, বিশেষত যদি বড় বাইনারি ফাইল থাকে।
কুদিত

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

2
@ সুইচ ৮87 এটি কিউ-তে একটি মন্তব্য হওয়া উচিত এবং উত্তর নয়, কারণ এটি ব্যাকআপগুলি করতে কীভাবে আপনি গিট ব্যবহার করবেন তা ব্যাখ্যা করে না।
slm

0

আপনি এটি এইভাবে ব্যবহার করতে পারেন:

rsync -avu --delete /home/user/A/* /home/user/B/

এইভাবে আপনি ফোল্ডার এ এর ​​বিষয়বস্তু বি ফোল্ডারে বি অনুলিপি করবেন, নিজে ফোল্ডার এ এর ​​সামগ্রী নয়।

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