এক্স দিন + + এর চেয়ে পুরানো ফাইলগুলি মুছুন


143

আমি একটি ফোল্ডারে 5 দিনেরও বেশি পুরানো ফাইল মুছতে কমান্ডটি পেয়েছি

find /path/to/files* -mtime +5 -exec rm {} \;

তবে আমি কীভাবে সেই ফোল্ডারে সাব-ডিরেক্টরিতে এটি করতে পারি?


আপনি কি সাব ডিরেক্টরি ভিতরে ফাইল বোঝাতে চান? না সাব ডিরেক্টরি নিজেই?
রাহুল

3
find /path/to -type d -empty -delete
কস্টাস

2
উপ-ডিরেক্টরিগুলিতে 5+ দিনের পুরানো ফাইলগুলি মুছুন
টেডি 2929

3
স্পেস সহ আমার কাছে ফাইল থাকলে সম্ভবত মজাদার। যেমন "টেস্ট ওয়ান" নামে একটি ফাইল এবং আরএম খাওয়ানো হয় rm test one। (যা "পরীক্ষা" নামক একটি ফাইল এবং "একটি" নামক একটি ফাইল মুছে ফেলবে, তবে "টেস্ট ওয়ান" নামক একটি ফাইল নয়)। ইঙ্গিত: -সিলিট বা -প্রিন্ট0
হেনেস

6
পার্শ্ব নোট হিসাবে, উত্তরের প্রথম লাইনে উল্লিখিত হিসাবে বিশেষ অক্ষরগুলির সাথে সমস্যাগুলি এড়াতে সর্বদা প্রদত্ত যুক্তিটি উদ্ধৃত করুনfind । উদাহরণস্বরূপ:find /path/to/files/ -exec somecommand '{}' \;
ওয়াল্ফ

উত্তর:


240

আরএম তে পাইপ দেওয়ার সময় বিশেষ ফাইলের নাম (স্পেস, কোট) দিয়ে সতর্ক থাকুন।

একটি নিরাপদ বিকল্প রয়েছে - মুছে ফেলা বিকল্প:

find /path/to/directory/ -mindepth 1 -mtime +5 -delete

এটি হ'ল কোনও পৃথক আরএম কল নেই এবং আপনার ফাইলের নাম নিয়ে চিন্তা করার দরকার নেই।

প্রতিস্থাপন -deleteসঙ্গে -depth -printআগে আপনি চালাতে এটা (এই কমান্ডটি পরীক্ষা করার জন্য -deleteবোঝা -depth)।


23
এছাড়াও -type fকেবল ফাইলগুলি মুছতে (এবং উপ ডিরেক্টরিগুলি রাখতে) ব্যবহার করুন
ওলেগ

3
বিকল্পভাবে, আপনি যদি পাঁচ দিনেরও বেশি নতুন সমস্ত ফাইলের জন্য একই কাজ করতে চান: সন্ধান করুন / পাথ / টু / ডিরেক্টরি / -মাইন্ডপথ 1 -মাইট -5 -ডিলিট
zmonteca

আমার পথে যদি স্পেস থাকে তবে আমি এটি কীভাবে করব? find /path/to/dir\ with\ spaces/ -mindepth 1 -mtime +5 -delete?
প্যাট্রিক গ্রেগরিও

3
@ uom-pgregorio আমি উদ্ধৃতিতে পথটি রাখার পরামর্শ দেব।
6:40

4
নোট করুন যে প্রতিটি findযুক্তি হ'ল একটি ফিল্টার যা পূর্ববর্তী ফিল্টারটির ফলাফলটিকে ইনপুট হিসাবে ব্যবহার করে। সুতরাং নিশ্চিত করুন যে আপনি শেষ আর্গুমেন্ট হিসাবে -ডিলিটটি যুক্ত করেছেন। IE: find . -delete -mtime +5বর্তমান পথে সমস্ত কিছু মুছে ফেলবে।
জোহান

15

নোট করুন যে যখন খুব বেশি ফাইল খুঁজে পাওয়া যায় তখন এই কমান্ডটি কাজ করবে না। এটির মতো ত্রুটি পাওয়া যাবে:

bash: /usr/bin/find: Argument list too long

মানে একটি কমান্ড লাইনের দৈর্ঘ্যে এক্সিকিউটিভ সিস্টেমের কলটির সীমা অতিক্রম করে। এইভাবে আরএম কার্যকর করার পরিবর্তে এটি xargs ব্যবহার করা অনেক বেশি দক্ষ । এখানে একটি উদাহরণ যা কাজ করে:

find /root/Maildir/ -mindepth 1 -type f -mtime +14 | xargs rm

এটি 14 দিন আগে / রুট / মাইল্ডিরের অধীনে / পুনরাবৃত্তভাবে সেখান থেকে আরও গভীর (মাইন্ডপথ 1) পরিবর্তিত সমস্ত ফাইল (টাইপ চ) সরিয়ে ফেলবে। আরও বিকল্পের জন্য সন্ধানের ম্যানুয়ালটি দেখুন


7
এসকিউবুন্টু ( Askubuntu.com/questions/589210/removing-files-older-than-7-day ) - এর উপর @ আফশিনহামেদিদের জবাব, নিউলাইন এবং বিশেষ অক্ষরযুক্ত ফাইলগুলি সম্পর্কে সতর্কতা অবলম্বন করুন। পরিবর্তে ব্যবহার করুনfind /root/Maildir/ -mindepth 1 -type f -mtime +14 -print0 | xargs -r0 rm --
সিবিহে

2
অথবা
সন্ধানের

8

এটা একই. আপনাকে কেবলমাত্র ফাইলের উপসর্গের চেয়ে মূল ডিরেক্টরি সরবরাহ করতে হবে। আপনার উদাহরণে এটি হবে:

find /path/to -type f -mtime +5 -exec rm {} \;

এটি 5 দিনের চেয়ে পুরানো সমস্ত ফাইল মুছে ফেলবে যা এর অধীনে রয়েছে /path/toএবং এর উপ-ডিরেক্টরিগুলি।

খালি সাব-ডিরেক্টরি মুছতে, উপরে @ কাস্টাস মন্তব্য পড়ুন।


4
মনে রাখবেন যে প্রতিটি ফাইলের জন্য আপনি আরএম কমান্ড কার্যকর করবেন। আপনার যদি 5 দিনের চেয়ে 1000 টি পুরানো ফাইল থাকে তবে rm 1000 বার শুরু হবে। এই কারণে কোস্টার মন্তব্যে বা-এক্সেক আরএম {} \ +
হেনেস

@ হেনেস: - ১) নিশ্চিত না যে আপনাকে +সে ক্ষেত্রে পালাতে হবে । - ২) -exec rm '{}' +তাদের নামে বিশেষ অক্ষর (স্পেস, নিউলাইনস, ইত্যাদি ...) দিয়ে ফাইলগুলির দুষ্টতা প্রতিরোধ করার জন্য লিখতে ভাল ।
সিবিহে

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.