আরএসআইএনসি, প্রেরণে থাকা ফাইলগুলি মুছে ফেলুন যা সাইড পাঠানোর সময় মোছা হয়েছিল। (তবে সবকিছু মুছবেন না)


9

আমি এতে rsync ব্যবহার করতে চাই ...

  • প্রেরণকারী পক্ষের ফাইলগুলি মুছুন যা প্রেরণের দিকে মোছা হয়েছিল
  • গ্রাহক পক্ষের আরএসআইএনডি ডিরেক্টরিতে থাকা অন্য ফাইলগুলি মুছবেন না

উদাহরণস্বরূপ, ধরা যাক আমার একটি ডিরেক্টরি আছে local-src:

পূর্বে: local-src স্থানীয়ভাবে রয়েছে ...

a.txt
b.txt
c.txt

আমার দূরবর্তী ডিরেক্টরি যা আমি সামগ্রীর সাথে সিঙ্ক করতে চাই local-srcতাকে ডাকা হয় remote-src

আগে: remote-src দূরবর্তীভাবে অন্তর্ভুক্ত ...

a.txt
b.txt
c.txt
d.txt
README.md

বলি যে আমি এতে কিছু ফাইল মুছলাম local-src:

local-srcস্থানীয় মোছার পরে: স্থানীয়ভাবে ...

c.txt

উত্স থেকে মুছে ফেলা ফাইলগুলিও গন্তব্যস্থলে মুছে ফেলা হয়েছে তা নিশ্চিত করার জন্য, তবে গন্তব্যের অন্য ফাইলগুলি মোছা না করে আমি কীভাবে আরএসসিএনসি ব্যবহার করতে পারি। উদাহরণস্বরূপ, আমি গন্তব্যস্থলে নিম্নলিখিতগুলি রাখতে চাই:

স্থানীয় মোছার পরে: remote-src দূরবর্তীভাবে রয়েছে ...

c.txt
d.txt
README.md

অর্থাৎ a.txtএবং b.txtদূরবর্তী অবস্থান থেকে পাশাপাশি মুছে ফেলা হয়, কিন্তু d.txtREADME.txtএকা বামে হয়।

আরএসসিএনসি দিয়ে এটি অর্জন করার কোনও উপায় আছে কি?

সম্পাদনা: রায়টি মনে হচ্ছে এটি rsync দিয়ে অসম্ভব হতে পারে। আমাকে কেন আমার এটি প্রয়োজন তা জিজ্ঞাসা করা হয়েছে, তাই আমার ব্যবহারের ক্ষেত্রে চিত্রিত করার জন্য:

ধরা যাক আমার একটি ওয়েব সার্ভার রয়েছে। সেই ওয়েব সার্ভারে, আমি একগুচ্ছ ডিরেক্টরি পেয়েছি, যাক আমি বলি যে আমার কাছে একটি ডিরেক্টরি Aএবং একটি public_htmlডিরেক্টরি আছে যা আমার সাইট থেকে পরিবেশন করা হয়েছে। ধরা যাক যে আমার কাছে কিছু স্বয়ংক্রিয় প্রক্রিয়া রয়েছে যা ডিরেক্টরিতে ফাইল তৈরি করে A। আমি rsync চাই (অথবা সিঙ্ক কিছু অন্যান্য টুল ব্যবহার করে) তৈরী বা ফাইল আপডেট মধ্যে Aথেকে public_htmlডিরেক্টরির, অন্যান্য নির্বিচারে ফাইল মধ্যে হতে পারে না মুছে public_html। আমি অবশ্যই চাইনি যে আমার ওয়েবসাইটটি দুর্ঘটনাক্রমে মুছে ফেলা হোক।

যদি rsync এই কাজের জন্য সরঞ্জাম না হয় তবে অন্য কেউ জানেন কীভাবে আমি এই কাজটি করতে পারি?


2
আপনার প্রশ্নটি পুনরায় পড়ার পরে, আমি মনে করি না যে এটি rsyncইতিমধ্যে দূরবর্তী ফোল্ডারে থাকা কোন ফাইলগুলি জানার উপায় নেই। আপনার অন্য একটি সরঞ্জাম বের করার প্রয়োজন হতে পারে।
Spack

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

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

উত্তর:


2

আপনি যা করতে চান তা যুক্তিসঙ্গত, তবে rsyncএটি নিজে থেকে এটি ব্যবহার করে তা হয় না। সুতরাং উত্তর না হয়

কারণটি সহজ: rsyncপ্রতিটি ডিরেক্টরিতে কী ছিল তার কোনও ইতিহাস রাখে না এবং কী কী মুছতে হবে এবং কী কী হবে না তা জানার কোনও উপায় নেই। অতিরিক্ত সমর্থন ছাড়া না।

আপনি নিজের সাথে জিজ্ঞাসা করা উচিত কেন আপনি এটি দিয়ে rsyncএটি করতে চান এবং এটি আরও স্পষ্ট করে তুলুন। আরও কিছু প্রোগ্রাম রয়েছে যা ব্যবহার librsync1.soকরে আরও বুদ্ধিমান।


rsyncপ্রতি সেটের প্রয়োজন নেই এমন স্বচ্ছন্দ প্রতিবন্ধকতাগুলির সাথে , আপনি আরডিফ-ব্যাকআপটি একবার দেখে নিতে পারেন :

mkdir a
touch a/xx
touch a/yy
rdiff-backup a b
ls b 

এই শো xxএবং yyহয় b

touch b/zz
rm a/xx
rdiff-backup a b

এই শো xxএবং zzহয় brdiff-backupআরো একটি ডিরেক্টরি রাখে rdiff-backup-dataমধ্যে bযাতে আপনি কোনো পরিবর্তন রোলব্যাক পারে, আপনি ব্যবহার করে একটি নিয়মিত ভিত্তিতে এই অভিযোগমোচন উচিত rdiff-backupকমান্ড। (উদাহরণে স্থানীয় ফাইলগুলির সাথে লক্ষ্য হিসাবে অতিরিক্ত ডেটা দেখানো মুছে ফেলা হয় না, তবে rdiff- ব্যাকআপ একটি নেটওয়ার্কেও কাজ করে)।


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

সার্ভারে আপনি এটি করবেন:

hg init
hg add file_list_excluding_that_should_not_should_be_deleted_if_not_on_client
hg commit -m "initial setup"

ক্লায়েন্টের উপর:

hg clone ssh://username@server/dir_to_repository

এখন আপনি যদি ক্লায়েন্টের কোনও ফাইল সরান এবং করেন:

hg commit -m "removed file"
ssh username@server "cd dir_to_repository; hg update --clean"

আপনার সরানো ফাইলটি সার্ভারে মুছে ফেলা হয়েছে, তবে অন্য কোনও ডেটা (ভান্ডারে যোগ করা হয়নি) মুছে ফেলা হয় না।


আমি গ্রহণ করতে পারি যে rsync এটি করবে না। তবে আমি একমত নই যে আরএসসিএন-এর মাধ্যমে এটি অসম্ভব হয়ে উঠবে- ​​আরএসসিএনসি যদি প্রেরণকারী পক্ষের ফাইলগুলি মুছে ফেলা হয়েছে তা জানতে পারে, তবে কেন সে তথ্যটি প্রাপ্তি পক্ষের কাছে পাঠাতে পারবে না? সতেজতার সাথে তুলনা করার পরে, আমি দেখতে পাচ্ছি না যে প্রাপ্তি পক্ষ কেবল ডিরেক্টরিটিতে থাকা অন্য সমস্ত কিছু মুছে না ফেলে কেবল আলাদা করে মুছে ফেলার ইঙ্গিতযুক্ত ফাইলগুলি মুছতে পারে না। ডিরেক্টরিটিতে প্রতিটি অপরকে (উত্স থেকে অপসৃত) মুছে ফেলা আমার পক্ষে অযৌক্তিক বলে মনে হয়।
হিদার মিলার

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

উপরে আমার প্রথম মন্তব্যটি স্পষ্ট করার জন্য - আমার বলা উচিত ছিল "rsync এর মতো কোনও সরঞ্জাম দিয়ে এরকম কিছু অসম্ভব হওয়া উচিত" বলে আমি সম্মত নই। স্বজ্ঞাতভাবে, এটি ঠিক মনে হচ্ছে এটি অর্জন করা খুব কঠিন হতে পারে না (যদি না আমি কিছু মিস করছি)।
হিদার মিলার

হ্যা ঠিক আছে. আমি মনে করি আমি এখনই দেখছি - আরএসসিএন কীভাবে জানতে পারে local-srcযে ডিরেক্টরিতে পরিবর্তনের জন্য কোনও প্রক্রিয়া না করেই কোনও কিছু মুছে ফেলা হয়েছিল process সম্ভবত এটি কঠিন হতে পারে।
হিথার মিলার

@ হিথার মিলার যেমনটি আমি লিখেছি, আপনার অনুরোধটি যুক্তিসঙ্গত, তবে rsyncএটি সরঞ্জাম নয়। দয়া করে বুঝতে পারি যে syncএর মধ্যে rsyncসিঙ্ক্রোনাইজ থেকে আসে এবং যে ঠিক নয় আপনি কি করতে চান। rsyncফোকাসের বিকাশের ক্ষেত্রে ডেটা স্থানান্তরকে দক্ষ (নূন্যতম) করা হয়েছে। অন্যান্য সরঞ্জাম rdiff-backup(এবং সম্ভব cvsup) এর জন্য এর কৌশলগুলি ব্যবহার করেছে তবে অতিরিক্ত বৈশিষ্ট্য সহ এটি তৈরি করে।
অ্যান্থন

1

আমি মনে করি না যে আরএসইএনসি কমান্ডের অংশ হিসাবে প্রাপ্ত অংশের ফাইলগুলি স্পষ্টভাবে বাদ না দিয়ে এটি সম্ভব is আরএসআইএনসি-এর জন্য ম্যান পৃষ্ঠা বিভাগটি দেখুন: "পার্ট-ডাইরেক্টরির বিধি এবং মুছে দিন"।

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

          rsync -av --filter=': .excl' --exclude=.excl host:src/dir /dest
          rsync -av --filter=':e .excl' host:src/dir /dest

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

          rsync -avF --delete-after host:src/dir /dest

তবে, যদি মার্জ ফাইলগুলি স্থানান্তরের অংশ না হয় তবে আপনাকে কিছু বৈশ্বিক বাদ দেওয়ার নিয়ম (যেমন কমান্ড লাইনে নির্দিষ্ট করা) নির্দিষ্ট করতে হবে, বা আপনাকে নিজের ডিরেক্টরিতে প্রতিটি পিছু ডিরেক্টরি মাইজ করে রাখতে হবে পক্ষ প্রাপ্তি। প্রথমটির উদাহরণ এটি (ধরুন যে দূরবর্তী .rules ফাইলগুলি তাদের বাদ দেয়):

   rsync -av --filter=’: .rules’ --filter=’. /my/extra.rules’
      --delete host:src/dir /dest

উপরের উদাহরণে অতিরিক্ত.rules ফাইলটি স্থানান্তরের উভয় পক্ষকে প্রভাবিত করতে পারে তবে (প্রেরণের দিকে) নিয়মগুলি .rules ফাইলগুলি থেকে মার্জ হওয়া নিয়মের অধীন হয় কারণ সেগুলি প্রতি ডিরেক্টরি সংযুক্তির বিধি অনুসারে নির্দিষ্ট করা হয়েছিল।

একটি চূড়ান্ত উদাহরণে, রিমোট পক্ষটি .rsync- ফিল্টার ফাইলগুলি স্থানান্তর থেকে বাদ দিচ্ছে, তবে প্রাপ্তির দিক থেকে কী মোছা যায় তা নিয়ন্ত্রণ করতে আমরা আমাদের নিজস্ব .rsync- ফিল্টার ফাইলগুলি ব্যবহার করতে চাই। এটি করার জন্য আমাদের প্রতি-ডিরেক্টরি মার্জ ফাইলগুলি অবশ্যই বাদ দিতে হবে (যাতে তারা মুছে না যায়) এবং তারপরে আর কী মুছে ফেলা উচিত নয় তা নিয়ন্ত্রণ করার জন্য স্থানীয় ফাইলগুলিতে বিধি বিধান করা উচিত। এই আদেশগুলির মধ্যে একটির মতো:

       rsync -av --filter=':e /.rsync-filter' --delete \
           host:src/dir /dest
       rsync -avFF --delete host:src/dir /dest

0

যদি আমি সঠিকভাবে বুঝতে পারি তবে --excludeআপনি যা যা সন্ধান করছেন তা হতে পারে:

$ ls src dst
dst:
a.txt  b.txt  c.txt  d.txt  README.md

src:
c.txt
$ rsync --update --delete --recursive --exclude="d.txt" --exclude="README.md" src/ dst
$ ls src dst
dst:
c.txt  d.txt  README.md

src:
c.txt

ভাল, না। আমি যে ফাইলগুলি বাদ দিতে চাইছি তার সবগুলি নিজেই তালিকাবদ্ধ করতে চাই না। আমি উত্স থেকে মুছে ফেলা ফাইলগুলি মুছতে কেবল আরএসসিএনসি চাই- গন্তব্যস্থলে একই ডিরেক্টরিতে অন্যান্য সম্ভাব্য ফাইলগুলি কী আছে তা উত্সটিতে আমার জানা উচিত নয়।
হিথার মিলার

0

তার জন্য আমার একটি উত্তর আছে। আমি মনে করি এটি কাজ করে। এবং এটা আমার জন্য কাজ করে। প্রথমে আপনার rsyncস্থানীয় ফাইলগুলিতে রিমোট ফাইল থাকা উচিত । তারপরে লোকাল সাইডে সমস্ত ফাইল থাকে।

sudo rsync -r -a -v --delete /root@xx.xx.xx.xx:/remote_dir/ /local_dir/

এখন স্থানীয় দিকে

a.txt
b.txt
c.txt
d.txt
README.md

তারপরে আপনি ফাইলগুলি মুছতে পারেন বা যা খুশি করতে পারেন local (স্থানীয় দিকে)। আপনার প্রশ্নে আপনি এই ফাইলগুলি মুছবেন।

মুছে ফেলা ফাইল

a.txt
b.txt

এর পরে আপনি rsyncরিমোট সাইডে লোকাল ফাইলগুলি করতে পারেন hen তারপরে উভয় পক্ষের একই ফাইল রয়েছে।

sudo rsync -r -a -v --delete /local_dir/ root@xx.xx.xx.xx:/remote_dir/

এটা দেয়

c.txt
d.txt
README.md

দূরবর্তী পাশ এবং স্থানীয় পাশ ফাইল। (ব্যবহারের --delete, এটা অন্যান্য ফাইলের মুছে ফেলে দূরবর্তী পাশ দিয়ে সাথে মেলে না হয় স্থানীয় পাশ )।

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