Rsync, কিছু ডিরেক্টরি বাদ দিয়ে কিছু নির্দিষ্ট ফাইলের অন্তর্ভুক্ত


14

আমি কেবলমাত্র কিছু নির্দিষ্ট ফাইলের ধরণের (যেমন .py) আরএসআইসি করতে চাই এবং কিছু ডিরেক্টরিতে (যেমন venv) ফাইলগুলি বাদ দিতে চাই ।

এটি আমি চেষ্টা করেছি:

rsync -avz --include='*/' --exclude='venv/' --include='*.py' --exclude='*' /tmp/src/ /tmp/dest/

কিন্তু এটি কাজ করে না।

আমি কী মিস করছি?

আমি এই প্রশ্নের উত্তর অনুসরণ করেছিলাম কিন্তু এটি কোনও লাভ হয়নি।


তোমার প্রাথমিক দরকার কেন --include='*/'?
চার্লি পার্কার

1
যদি আমার কাছে পুনরাবৃত্ত ডিরেক্টরিগুলি থাকে যা আমি কেবল এক ধরণের ফাইল প্রেরণ করতে পারি তবে কীভাবে একটি কমান্ডটি ক্রেফ করবে। মনে হচ্ছে এটি কেবলমাত্র লক্ষ্য নির্দেশকের জন্যই হয়েছিল কারণ সম্ভবত সর্বশেষ বাদ দেওয়া যা সবকিছু বাদ দেয়
চার্লি পার্কার

উত্তর:


17

venv/অন্তর্ভুক্ত করার আগে এটিকে বাদ দেওয়া দরকার */:

rsync -avz --exclude='venv/' --include='*/' --include='*.py' --exclude='*' /tmp/src/ /tmp/dest/

সূক্ষ্মতাটি হ'ল rsyncনিয়মগুলি ক্রমে প্রক্রিয়া করে এবং প্রথম মিলের নিয়ম জয়ী হয়। সুতরাং, যদি --include='*/'এর আগে হয় --exclude='venv/'তবে ডিরেক্টরিটি venv/অন্তর্ভুক্ত থাকে --include='*/'এবং বাদ দেওয়ার নিয়মটি কখনও পরামর্শ করা হয় না।

আমরা কি এটি সহজ করতে পারি?

আমাদের দরকার কেন --include='*/'এবং --exclude='*'? কেন --exclude=venv/ --include='*.py'পর্যাপ্ত নয় ?

ডিফল্ট ফাইল / ডিরেক্টরি অন্তর্ভুক্ত করা হয়। সুতরাং, বিবেচনা করুন:

rsync -avz --exclude='venv/' --include='*.py' source target

এর মধ্যে ফাইল বা ডিরেক্টরিগুলি অন্তর্ভুক্ত সমস্ত কিছুই অন্তর্ভুক্ত থাকবে venv/। আপনি তবে কেবল .pyফাইল চান want এর অর্থ হল যে আমাদের সাথে অন্য ফাইলগুলি স্পষ্টভাবে বাদ দিতে হবে --exclude='*'

--exclude='*'ফাইল এবং ডিরেক্টরি উভয়ই বাদ দেয় । সুতরাং, আমরা যদি নির্দিষ্ট করে রাখি --exclude='*', তবে সমস্ত ডিরেক্টরি বাদ দেওয়া হবে এবং কেবলমাত্র .pyসেই রুট ডিরেক্টরিগুলির মধ্যে ফাইলগুলি পাওয়া যাবে। .pyউপ-ডিরেক্টরিগুলিতে ফাইলগুলি কখনই খুঁজে পাওয়া যাবে না কারণ rsyncযে ডিরেক্টরিগুলি বাদ নেই সেগুলি অনুসন্ধান করে না। সুতরাং, যদি আমাদের থাকে তবে আমাদের অবশ্যই --exclude='*'এটির আগে থেকেই --include='*/'সমস্ত ডিরেক্টরিগুলির বিষয়বস্তু অন্বেষণ করা উচিত তা নিশ্চিত করতে হবে।


গ্রেট! ধন্যবাদ! শুধু আমার বোঝার জন্য, কেন আমাদের প্রয়োজন --include='*/'এবং --exclude='*'? --exclude=venv/ --include='*.py'শুধু কাজ করে না কেন ?
CentAu

1
@ কেন্টআউ আমি এই নিয়ে একটি আলোচনার সাথে উত্তরটি আপডেট করেছি।
1024

যদি আমার কাছে পুনরাবৃত্ত ডিরেক্টরিগুলি থাকে যা আমি কেবল এক ধরণের ফাইল প্রেরণ করতে পারি তবে কীভাবে একটি কমান্ডটি ক্রেফ করবে। দেখে মনে হচ্ছে এটি কেবলমাত্র লক্ষ্য ডিরেক্টরিতে এটি করে কারণ সম্ভবত সর্বশেষ বাদ দেওয়া যা সমস্ত কিছু বাদ দেয়।
চার্লি পার্কার

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