Rsync --delete বিকল্পটি টার্গেট ডিরেক্টরিতে ফাইলগুলি মুছবে না


14

আমি মূল ডিরেক্টরিতে উপস্থিত নেই এমন টার্গেট ডিরেক্টরিতে ফাইলগুলি মুছতে --deleteবিকল্পটি ব্যবহার করার চেষ্টা করছিrsync

আমি যে কমান্ডটি ব্যবহার করছি তা এখানে:

rsync -avz --ignore-existing --recursive --delete /var/www/* root@mydomaintest.com:/var/www

সুতরাং আমার প্রশ্নটি হল, আমি কীভাবে টার্গেট ডিরেক্টরিতে থাকা সমস্ত ফাইল মুছতে পারি যা মূল ডিরেক্টরিতে উপস্থিত নেই?

উত্তর:


14

এই আদেশটি ব্যবহার করুন:

rsync --archive --verbose --compress --ignore-existing --delete /var/www/ root@mydomaintest.com:/var/www

আপনার একটি "*" দরকার নেই এবং এটিও ব্যবহার করা উচিত নয়।

ফাইল বা ডিরেক্টরিগুলি বাদ / অন্তর্ভুক্ত করতে আপনার এই পরামিতিগুলি ব্যবহার করা উচিত:

--exclude 'to_exclude*'
--include 'to_include*'

ঠিক আছে আমাকে এই চেষ্টা করতে দিন :)
ব্যবহারকারীর ২২৮৮৮66

2
তাহলে কি "*" এর ফলে --delet কমান্ডটি কাজ করছে না?
ব্যবহারকারী 2028856

2
দেখে মনে হচ্ছে। :)
এবি


1
"*" কিছু ক্ষেত্রে গুরুত্বপূর্ণ হতে পারে কারণ এটি "/" দিয়ে শুরু হওয়া ফাইল / ডিরেক্টরিগুলি বাদ দেয়। উদাহরণস্বরূপ, আমি যখন এটি ব্যবহার করি তখন আরএসসিএনসি ব্যবহার করে কোনও উন্নয়ন মেশিন থেকে কোনও উত্পাদন মেশিনে গিটের অধীনে রক্ষণাবেক্ষণকৃত একটি ডিরেক্টরি অনুলিপি করতে পারি। আমি .git সংগ্রহস্থল ডিরেক্টরি বা .gitignore এর মতো ফাইলগুলিকে সিঙ্ক করতে চাই না, কেবলমাত্র কার্যনির্বাহী গাছ, উপরের স্তরের ফাইলগুলি পাশাপাশি উপ-ডিরেক্টরিতে অন্তর্ভুক্ত।
sootsnoot

14

আপনার কমান্ডটি কাজ করছে না কারণ আপনি যখন /var/www/*উত্স হিসাবে ব্যবহার করছেন তখন আপনার শেলটি গ্লোব্বিং করছে অর্থাৎ শেলটি *সেই ডিরেক্টরিতে থাকা সমস্ত ফাইলগুলিতে প্রসারিত হচ্ছে এবং ফাইলগুলি একে একে অনুলিপি করছে, সুতরাং এখানে পৃথক ফাইলগুলি পরিবর্তে উত্স হয়ে উঠেছে অভিভাবক ডিরেক্টরি।

সুতরাং, আপনি যদি ব্যবহার করেন /var/www/*তবে আপনার --recursiveবিকল্পের দরকার নেই *কারণ ফাইলগুলি অনুলিপি করার কারণ হবে (তাদের বিষয়বস্তুগুলির সাথে কোনও ডিরেক্টরি সহ), ফাইলগুলি অন্তর্ভুক্তকারী প্যারেন্ট ডিরেক্টরি নয়। একই কারণে --deleteকাজ করছে না কারণ উত্স ডিরেক্টরিতে নেই এমন --deleteগন্তব্য ডিরেক্টরি থেকে ফাইলগুলি সরিয়ে দেবে , তবে আপনি ফাইলগুলি অনুলিপি করছেন যাতে এটি ফাইলগুলি সরিয়ে না দেয় (প্রত্যাশিতভাবে)।

এটি আপনাকে আরও পরিষ্কার করে দেবে:

/foo$ ls -l
-rw-rw-r-- 1 user user    0 Apr 16 17:56 egg
-rw-rw-r-- 1 user user    0 Apr 16 17:56 spam
drwxrwxr-x 2 user user 4096 Apr 16 18:14 test


/bar$ ls -l
-rw-rw-r-- 1 user user 0 Apr 16 17:56 egg
-rw-rw-r-- 1 user user 0 Apr 16 18:13 lion
-rw-rw-r-- 1 user user 0 Apr 16 17:56 spam


$ rsync -avz --ignore-existing --recursive --delete 
/foo/* /bar/

+ rsync -avz --ignore-existing --recursive --delete 
/foo/egg /foo/spam /foo/test /bar/

sending incremental file list
test/
test/hello

sent 173 bytes  received 39 bytes  424.00 bytes/sec
total size is 0  speedup is 0.00


/bar$ ls -l
-rw-rw-r-- 1 user user    0 Apr 16 17:56 egg
-rw-rw-r-- 1 user user    0 Apr 16 18:13 lion
-rw-rw-r-- 1 user user    0 Apr 16 17:56 spam
drwxrwxr-x 2 user user 4096 Apr 16 18:14 test

যেমন আপনি দেখতে পাচ্ছেন, আমি উত্সটি ব্যবহার করেছি /foo/*সুতরাং rsyncকমান্ডটি কার্যকর করা হচ্ছে

rsync -avz --ignore-existing --recursive --delete /foo/egg 
/foo/spam /foo/test /bar/

সঙ্গে *শেল উপার্জন এটি প্রসারিত করতে এবং উৎস আর্গুমেন্ট নয়, সামগ্রিকভাবে পেরেন্ট ডাইরেক্টরি যেমন পৃথকভাবে সব ফাইল করা (এবং আপনার কাছে প্রয়োজন হবে না --recursiveএই ক্ষেত্রে)।

সুতরাং, আপনি যদি --deleteকাজটি করতে চান তবে এটিকে চালনা করুন:

rsync -avz --ignore-existing --recursive --delete 
/var/www/ root@mydomaintest.com:/var/www/

4
আসল সমস্যাটির দিকে ইঙ্গিত করে দুর্দান্ত ব্যাখ্যা: উত্স তালিকাটি প্রসারিত করতে '*' ব্যবহার করে।
আন্তোনিও বারদাজ্জি

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