আমার নামে ডিরেক্টরি রয়েছে:
2012-12-12
2012-10-12
2012-08-08
ব্যাশ শেল স্ক্রিপ্ট দিয়ে 10 দিনেরও বেশি পুরানো ডিরেক্টরিগুলি কীভাবে আমি মুছব?
ctimeইনোড পরিবর্তন সময়। ডিরেক্টরিতে ফাইল যুক্ত করা বা ডিরেক্টরি থেকে সরানো হলে এটি পরিবর্তিত হয়।
আমার নামে ডিরেক্টরি রয়েছে:
2012-12-12
2012-10-12
2012-08-08
ব্যাশ শেল স্ক্রিপ্ট দিয়ে 10 দিনেরও বেশি পুরানো ডিরেক্টরিগুলি কীভাবে আমি মুছব?
ctimeইনোড পরিবর্তন সময়। ডিরেক্টরিতে ফাইল যুক্ত করা বা ডিরেক্টরি থেকে সরানো হলে এটি পরিবর্তিত হয়।
উত্তর:
এটি আপনার জন্য এটি পুনরাবৃত্তভাবে করবে:
find /path/to/base/dir/* -type d -ctime +10 -exec rm -rf {} \;
ব্যাখ্যা:
findফাইল / ডিরেক্টরি / লিঙ্ক ইত্যাদি সন্ধানের জন্য ইউনিক্স কমান্ড/path/to/base/dir: আপনার সন্ধান শুরু করার জন্য ডিরেক্টরি।-type d: কেবল ডিরেক্টরিগুলি সন্ধান করুন-ctime +10: পরিবর্তনের সময়টি 10 দিনের চেয়ে পুরানোগুলির সাথে কেবল বিবেচনা করুন-exec ... \;: পাওয়া প্রতিটি ফলাফলের জন্য, নিম্নলিখিত কমান্ডটি ভিতরে করুন ...rm -rf {}: পুনরাবৃত্তিতে ডিরেক্টরি মুছে ফেলার জন্য জোর করে; {}অংশ কোথায় ফলাফলের পূর্ববর্তী অংশ থেকে বা প্রতিস্থাপিত পরার।বিকল্পভাবে, ব্যবহার করুন:
find /path/to/base/dir/* -type d -ctime +10 | xargs rm -rf
যা কিছুটা বেশি দক্ষ, কারণ এটি এর পরিমাণ:
rm -rf dir1 dir2 dir3 ...
উল্টোদিকে:
rm -rf dir1; rm -rf dir2; rm -rf dir3; ...
-execপদ্ধতি হিসাবে ।
এর আধুনিক সংস্করণগুলির সাহায্যে find, আপনি এটির ;সাথে প্রতিস্থাপন করতে পারবেন +এবং এটি xargsপ্রতিটি এক্সিকিউটিভ সিস্টেম সিস্টেমে যতগুলি ফাইল ফিট করবে ততগুলি পাসিং আপনার জন্য কলটির সমতুল্য করবে:
find . -type d -ctime +10 -exec rm -rf {} +
-mtimeএটি আমার জন্য আরও ভাল ছিল কারণ এটি অনুমতি পরিবর্তনের পরিবর্তে সামগ্রী পরিবর্তনগুলি পরীক্ষা করে, অন্যথায় এটি নিখুঁত ছিল।
find /path/to/base/dir/*।
-mindepth 1(বরং তার চেয়ে ভাল /path/to/folder/*)।
আপনি যদি /path/to/baseউদাহরণস্বরূপ সমস্ত সাব-ডাইরেক্টরিগুলি মুছতে চান
/path/to/base/dir1
/path/to/base/dir2
/path/to/base/dir3
তবে আপনি রুটটি মুছতে চান না /path/to/base, আপনাকে যুক্ত করতে -mindepth 1এবং -maxdepth 1বিকল্পগুলি করতে হবে, যা কেবলমাত্র অধীনস্থ ডিরেক্টরিগুলিতে অ্যাক্সেস করবে/path/to/base
-mindepth 1/path/to/baseম্যাচগুলি থেকে মূলকে বাদ দেয় ।
-maxdepth 1হবে শুধুমাত্র অবিলম্বে অধীনে সাব মেলে /path/to/baseযেমন /path/to/base/dir1, /path/to/base/dir2এবং /path/to/base/dir3কিন্তু এটি একটি recursive পদ্ধতিতে এই তালিকা সাবডিরেক্টরি না। সুতরাং এই উদাহরণ উপ-ডিরেক্টরি তালিকাভুক্ত করা হবে না:
/path/to/base/dir1/dir1
/path/to/base/dir2/dir1
/path/to/base/dir3/dir1
এবং তাই এগিয়ে।
সুতরাং, /path/to/base10 দিনের চেয়ে পুরানো সমস্ত সাব-ডিরেক্টরিগুলি মুছতে ;
find /path/to/base -mindepth 1 -maxdepth 1 -type d -ctime +10 | xargs rm -rf
find-deleteঅপারেশন সমর্থন করে, তাই:
find /base/dir/* -ctime +10 -delete;
আমি মনে করি এমন একটি ক্যাপচার আছে যে ফাইলগুলি 10+ দিন বেশি পুরানো হওয়া দরকার। চেষ্টা করা হয়নি, কেউ মন্তব্য করে নিশ্চিত করতে পারেন।
এখানে সর্বাধিক ভোট দেওয়া সমাধানটি অনুপস্থিত, -maxdepth 0সুতরাং এটি rm -rfমুছে ফেলার পরে এটি প্রতিটি উপ-ডিরেক্টরিকে কল করবে। এটি বোঝা যায় না, তাই আমি প্রস্তাব দিই:
find /base/dir/* -maxdepth 0 -type d -ctime +10 -exec rm -rf {} \;
-deleteসমাধান উপরে ব্যবহার করে না -maxdepth 0কারণ findনালিশ জানাব Dir খালি না থাকে। পরিবর্তে, এটি বোঝায় -depthএবং নীচে থেকে মুছে ফেলা হয়।
-deleteকাজগুলি নিশ্চিত করতে পারি , তবে আপনি যেমন বলেছিলেন আপনি কেবল এটি খালি ডিরেক্টরি মুছতে ব্যবহার করতে পারেন, অনেকটা পছন্দ rmdir।
উপরের সরবরাহিত স্ক্রিপ্টগুলি এবং কিছু অন্যান্য স্ক্রিপ্টগুলি ব্যবহার করে এই অধিকারটি অর্জনের জন্য আমি লড়াই করে যাচ্ছিলাম, বিশেষত যখন ফাইল এবং ফোল্ডারের নামগুলিতে নতুন লাইন বা স্পেস ছিল।
অবশেষে tmpreaper এ হোঁচট খেয়েছে এবং এটি আমাদের জন্য এখনও পর্যন্ত বেশ ভালভাবে কাজ করা হয়েছে।
tmpreaper -t 5d ~/Downloads
tmpreaper --protect '*.c' -t 5h ~/my_prg
মূল উত্স লিঙ্ক
পরীক্ষার মতো বৈশিষ্ট্য রয়েছে যা ডিরেক্টরিগুলি পুনরাবৃত্তভাবে পরীক্ষা করে এবং সেগুলি তালিকাভুক্ত করে। মুছে ফেলার সময় নির্দিষ্ট প্যাটার্নের জন্য সিমলিংক, ফাইল বা ডিরেক্টরি এবং সুরক্ষা মোড মুছানোর ক্ষমতা
অথবা
rm -rf `find /path/to/base/dir/* -type d -mtime +10`
আপডেট হয়েছে, এর দ্রুত সংস্করণ:
find /path/to/base/dir/* -mtime +10 -print0 | xargs -0 rm -f
xargs --show-limits।
-print0/ -0বিশেষ শেল অক্ষরগুলির যত্ন নেবে না , না?
xargsসংস্করণটি @ মডেল করবে তবে প্রথম লাইনটি এটি করবে না।
findতখন নামটির দিকে না