rsync ডিরেক্টরি বাদ দিয়ে কাজ করছে না


34

আমি ফেডোরা 17 64-বিট চালাচ্ছি এবং এটি rsync --exclude=/home/ben/<dir>প্রত্যাশার মতো কাজ করছে না।

আমি rsyncআমার হোম ডিরেক্টরিটি একটি থাম্ব ড্রাইভে চেষ্টা করছি , তবে আমি অবশ্যই অবশ্যই ডিরেক্টরিগুলি বাদ দিতে চাই যা ক্যাশে ফাইল ধারণ করে এবং ফাইলগুলি তৈরি করে। এটি হ'ল আদেশটি:

rsync --exclude=/home/ben/build/ --exclude=/home/ben/.ccache -arv /home/ben home-ben/

যাইহোক, থেকে বিষয়বস্তু ~/buildএবং ~/.ccacheদ্বারা কপি করা হচ্ছে rsync। আমি কি ভুল করছি?


1
আমি মনে করি নিদর্শনগুলি বাদ দিয়ে কেবল কাজ করে না।
সেরেন

উত্তর:


37

গ্লোবাল rsyncএকটি নেতৃস্থানীয় শুরু ফিল্টার নিয়ম /করছে নোঙর স্থানান্তর রুট করতে। ম্যান পৃষ্ঠার "অন্তর্ভুক্ত / প্যাটার্ন বিধিগুলি" বিভাগ থেকে উদ্ধৃতি দেওয়া:

যদি প্যাটার্নটি একটি / দিয়ে শুরু হয় তবে এটি ফাইলের শ্রেণিবিন্যাসের একটি নির্দিষ্ট স্পটে অ্যাঙ্কর করা হয়, অন্যথায় এটি পথের নামের শেষের সাথে মিলে যায়। এটি নিয়মিত প্রকাশের ক্ষেত্রে একটি শীর্ষস্থানীয়ের মতো। সুতরাং "/ foo" "স্থানান্তরের মূল" বা "বিশ্বব্যাপী নিয়মের জন্য" অথবা মার্জ-ফাইলের ডিরেক্টরিতে (প্রতি ডিরেক্টরি নিয়মের জন্য) "foo" এর নামের সাথে মেলে।

আপনার কমান্ড ( rsync ... -arv /home/ben home-ben/) এ, ফাইলটি /home/ben/fooস্থানান্তরিত হবে home-ben/ben/foo। স্থানান্তর এর মূল home-benএবং সঠিক ফিল্টার পথ /ben/foo। সুতরাং,

  • মেলে /home/ben/.ccacheআপনি একটি ফিল্টার পাথ প্রয়োজন/ben/.ccache
  • মেলে /home/ben/build/আপনি একটি ফিল্টার পাথ প্রয়োজন/ben/build/

আরো বিস্তারিত ব্যাখ্যা খুঁজে পাওয়া যেতে পারে "নোঙ্গরকরণ অন্তর্ভুক্ত করুন / বহির্ভূত নিদর্শন" এর ধারা rsync(1)man পৃষ্ঠা


নোট করুন যে কেবল নেতৃত্বের বাইরে যাওয়া আপনার /প্রয়োজনীয়তা যা প্রয়োজন তা নয়। একই ম্যান পৃষ্ঠা বিভাগ থেকে আবার উদ্ধৃত করা:

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

এভাবে একটি ফিল্টার প্যাটার্ন build/একটি বিল্ড ডিরেক্টরি জন্য যে কোন জায়গায় মেলে দিবে /home/benএমনকি /home/ben/many/sub/directories/build/


2
মূল বিশদটি হ'ল বিষয়টি স্ল্যাশ করে। যদি আপনি উত্স ডিরেক্টরি (rsync -a উত্স / গন্তব্য) এর শেষে স্ল্যাশ যুক্ত করেন তবে এটি উত্সের বিষয়বস্তুগুলি অনুলিপি করবে, অন্যথায় rsync -a source destinationউত্স ডিরেক্টরিটি গন্তব্যে অনুলিপি করে। বাদ দেওয়া এক্সপ্রেশনটি জানানোর জন্য স্থানান্তরটির মূলটি কী হবে তা এটি নির্ধারণ করে। বাদ দেওয়া এক্সপ্রেশন / এর সঠিক ব্যবহারের পরে উপরে বর্ণিত হবে। বিশেষত দ্রষ্টব্য যে rsync --exclude='/dir1' source destinationকোনও কিছুই বাদ দেবে না।
পিগোয়েজ

11

আমি মনে করি আপনার excludeপথগুলি উত্স পথে তুলনামূলকভাবে হওয়া দরকার। আপনি কি পরিবর্তে এটি চেষ্টা করতে পারেন?

rsync --exclude=build/ --exclude=.ccache -arv /home/ben home-ben/

তুলনার জন্য এখানে একটি পরীক্ষা দেওয়া আছে:

/tmp$ tree src dest
src
├── a
└── b
dest
└── foo/

/tmp$ rsync -nav --exclude /tmp/src/b /tmp/src /tmp/dest
sending incremental file list
src/
src/a
src/b

$ rsync -nav --exclude b /tmp/src /tmp/dest
sending incremental file list
src/
src/a

2
এই উত্তরটি ভুল। আপেক্ষিকভাবে বাদ দেওয়ার পথ দিয়ে আপনি সর্বত্র প্যাটার্নটি বাদ দেবেন!
rubo77

এই পোস্টটি সঠিক। মিলটি পাঠ্য-ভিত্তিক, ফাইল ইনোড-ভিত্তিক নয়। --verboseকমান্ডের আউটপুট যেদিকেই প্রদর্শিত হবে তা আপনাকে ব্যবহার করতে হবে এমন বিন্যাস।
শ্রীধর সারনোবাত

এটি আমার পক্ষে কাজ করেছে।
ঝেন্যু

উত্স পথটি যদি '/' হয় তবে পরম্পরাটি আপেক্ষিক পাথ হয় তবে এটি এখনও কার্যকর হয় না।
সেরেন

এটিই আমার পক্ষে কাজ করেছে।
জোনাথন

2

স্ক্রিপ্টে আমার এই সমস্যা ছিল (আমি জানি না এটি আপনার ক্ষেত্রে কিনা)। আমি হ'ল কারণ আমি এই কমান্ডটি একটি স্ক্রিপ্টে ব্যবহার করেছি এবং আমি ব্যাশের পরিবর্তে sh ব্যবহার করছি। আপনার স্ক্রিপ্টের শুরুতে শেবাংটি পরীক্ষা করুন।


1

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

rsync --exclude=/home/ben/build/ --exclude=/home/ben/.ccache -arv /home home-all/

তবে কেবলমাত্র পিছনের স্ল্যাশ সহ ফোল্ডারের বিষয়বস্তু আরএসসিএন করা ভাল:

rsync --exclude=/build --exclude=/.ccache -arv /home/ben/ home-ben/

আপনি একটি উপেক্ষা-তালিকাটিও ব্যবহার করতে পারেন, দেখুন: https://askubuntu.com/questions/545655/backup-your-home-directory-with-rsync-and-skip-useless-folders


0

আরএসআইএনসি সহ একটি নির্দিষ্ট ফোল্ডার বাদ দেওয়ার জন্য আপনাকে কমান্ডের আপেক্ষিক পথটি বিবেচনা করতে হবে। আপনার ক্ষেত্রে:

rsync --exclude=/ben/build/ --exclude=/ben/.ccache -arv /home/ben home-ben/

যেখানে "বেন" হ'ল ফোল্ডারটি আপনি সিঙ্ক করছেন

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