আমার নামে ডিরেক্টরি রয়েছে:
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/base
10 দিনের চেয়ে পুরানো সমস্ত সাব-ডিরেক্টরিগুলি মুছতে ;
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
তখন নামটির দিকে না