কেবল বহিরাগত ফাইলগুলি মুছতে rsync ব্যবহার করা হচ্ছে


13

দুটি ডিরেক্টরি কাঠামোর তুলনা এবং লক্ষ্য স্থানে বহিরাগত ফাইল এবং ডিরেক্টরি মুছে ফেলার সেরা উপায় কী?

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

মূল চিত্রগুলি /home/gallery/images/সাব-ডাইরেক্টরিগুলি ব্যবহার করে অ্যালবামগুলিতে সঞ্চিত থাকে এবং সংগঠিত হয়। থাম্বনেইলগুলি ক্যাচ করা হয় /home/gallery/thumbs/, একই ডিরেক্টরি কাঠামো এবং চিত্র ডিরেক্টরি হিসাবে ফাইলের নাম ব্যবহার করে।

এটি অর্জনের জন্য আমি নিম্নলিখিতটি ব্যবহার করার চেষ্টা করেছি:

rsync  -r --delete --ignore-existing /home/gallery/images /home/gallery/thumbs

যদি সমস্ত থাম্বনেইল ইতিমধ্যে ক্যাশে হয়ে থাকে তবে এটি ঠিকঠাক কাজ করবে, তবে এমন কোনও নিশ্চয়তা নেই যে এটি ঘটবে, যখন এটি ঘটে তখন থাম্ব ডিরেক্টরিটিতে মূল আকারের চিত্রগুলি অনুলিপি করা থাকে।

আমি যা করার চেষ্টা করছি তা আমি কীভাবে সেরা অর্জন করতে পারি?

উত্তর:


8

আমি মনে করি না rsyncএটির জন্য সর্বোত্তম পন্থা। আমি নীচের মতো ব্যাশ ওয়ান-লাইনার ব্যবহার করব:

$ cd /home/gallery/thumbs && find . -type f | while read file;do if [ ! -f "../images/$file" ];then echo "$file";fi;done

যদি এই ওয়ান-লাইনার ফাইলগুলির সঠিক তালিকা তৈরি করে তবে আপনি rmকমান্ডের পরিবর্তে কমান্ড চালানোর জন্য এটি পরিবর্তন করতে পারেন echo


ধন্যবাদ টম আমার মনে হয় ডিরেক্টরিগুলি পরিষ্কার করার জন্যও আমার এটি দ্বিতীয়বার চালানো দরকার, তবে ফাইলগুলির পরিবর্তে কমান্ডগুলিতে ডিরেক্টরিগুলি নির্দিষ্ট করে এবং প্রতিধ্বনিটির পরিবর্তে rmdir?
ব্রায়ান

@ ব্রায়ান: হ্যাঁ এটি যুক্তিযুক্ত বলে মনে হচ্ছে। পরীক্ষায় findএবং [পরীক্ষায় আপনাকে পতাকাগুলি পরিবর্তন করতে হবে ]। অবশ্যই, দয়া করে আমি আপনাকে যে আদেশ দিয়েছি এবং যে কোনও পরিবর্তন করেছি, এবং উভয়ের সাথে পুরোপুরি পরীক্ষা করুন echo!
টম শ

অনেক ধন্যবাদ, আমি পরীক্ষার সময় প্রচুর পরিমাণে প্রতিধ্বনি প্রয়োগ করব।
ব্রায়ান

1
সবেমাত্র একটি চিন্তাভাবনা ছিল: আপনি "ls" দিয়ে পরীক্ষা করতে পারেন তা নিশ্চিত করার জন্য এটি হোয়াইটস্পেসের সাথে ভালভাবে কাজ করে। শুভ কামনা.
টম শ

34

--existingআপনারও দরকার :

rsync -r --delete --existing --ignore-existing /home/gallery/images /home/gallery/thumbs

ম্যানপেজ থেকে:

  --existing, --ignore-non-existing
          This tells rsync to skip creating files (including  directories)
          that  do  not  exist  yet on the destination.  If this option is
          combined with the --ignore-existing option,  no  files  will  be
          updated  (which  can  be  useful if all you want to do is delete
          extraneous files).

1
যদি কিছুতেই ত্রুটি থাকে তবে আপনার দুর্দান্ত উত্তরটি কাজ করবে না। এজন্য আপনাকে --ignore-errorsযুক্তিও যুক্ত করতে হবে । এটাই আমার পক্ষে কাজ করেছে। --existingএবং আপনাকে ধন্যবাদ --ignore-existing! আমি আপনার উত্তরটি এখানে আমার উত্তরের ভিত্তি হিসাবে ব্যবহার করেছি ।
লনিবেস্ট

1
@LonnieBest সেখানে ত্রুটি, হয় এমনকি যদি rm, cpবা mvযে কি ত্রুটি আছে হিসাবে কাজ হবে না: সেগুলোকে যে দিকে তাকিয়ে করা উচিত এবং সফল সমাপ্তির থেকে অপারেশন প্রতিরোধ সমস্যা আছে। আপনি ত্রুটি উপেক্ষা সবচেয়ে সরঞ্জাম নির্দেশ করতে (যেমন -fজন্য rm) কিন্তু আমি দেখতে পাচ্ছি না যে কিভাবে প্রশ্ন বা এই উত্তরটি প্রাসঙ্গিক নয়।
মক্কি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.