30 দিনেরও বেশি বয়সী ফাইলগুলি মুছে ফেলা হচ্ছে


8

সর্বনিম্ন 15000 ফাইল সহ আমার ক্যাশে ফোল্ডার রয়েছে।

আমি এটি চেষ্টা করেছি:

find cache* -mtime +30 -exec rm {} \;

কিন্তু এটি আমার সার্ভারকে আকাশে বোঝা উড়েছে!

এর চেয়ে আরও দ্রুত / আরও ভাল সমাধান কি আছে ?

অথবা আমি এই আদেশের গতি বা পুনরাবৃত্তি সীমাবদ্ধ করতে পারি ?


1
যদি cache*অনেকগুলি ফাইলে প্রসারিত হয় তবে আপনি find . -name 'cache*' -mtime +30 -exec rm {} \;পরিবর্তে এর মতো কিছু চেষ্টা করতে চাইতে পারেন ।
জাপ এল্ডারিং

উত্তর:


9

আমি tmpwatchএই জিনিসগুলির জন্য ব্যবহার করতে চাই , এটি শেষ বারের জন্য ফাইলটি সংশোধন করা হয়েছিল। এটি সহজ এবং অনেক ক্ষেত্রে ভাল কাজ করে:

tmpwatch -m 720 /path/to/cache

উবুন্টুর জন্য, tmpreaperপরিবর্তে পরীক্ষা করুন।

আপনি নিম্নলিখিতটি ব্যবহার করার চেয়ে ফাইলটি অ্যাক্সেসের সময়টি যাচাই করতে চান:

tmpwatch -a 720 /path/to/cache

আপনি নোয়াটিমের সাথে মাউন্ট করা ফাইল সিস্টেমে tmpwatch -a ব্যবহার করতে পারবেন না। আপনি এখনও -m ব্যবহার করতে পারেন


আমি ব্যবহার করছি Ubuntu 10.04.2 LTSএবং সেই কমান্ডটি বিদ্যমান নেই ..
ক্রিশ্চিয়ান

2
tmpreaperপরিবর্তে ক্রিশ্চিয়ান পরীক্ষা করুন
slhck

নোটিম বিকল্পের সাহায্যে মাউন্ট করা ফাইল সিস্টেম পরিচালনা করতে এগুলি ব্যবহার করার সময় কোনও সমস্যা?
বেনামে

@ বেনামে লুর্কার আমি আপনার জন্য উত্তরটি পরিবর্তন করেছি
ওয়াজনসটেক

6

আপনি প্রতিটি ফাইলের জন্য নতুন প্রক্রিয়া ব্যবহার করে এড়াতে পারবেন

find cache* -mtime +30 -delete

3

উপরোক্তটি সুন্দর সহ চালানোর চেষ্টা করুন:

nice -n 39 find cache* -mtime +30 -exec rm -f {} ';'

এইভাবে বিশাল লোডটি কেবল তখনই প্রদর্শিত হবে যখন অন্য কিছু চালানোর প্রয়োজন হয় না, অন্যথায় অন্যান্য প্রক্রিয়াগুলি অগ্রাধিকার গ্রহণ করবে (যদি তাদের কমনীয়তা 19 এর চেয়ে কম হয় বা সর্বোচ্চ হয়)।

নোট করুন যে -n বিকল্পটিতে আর্গুমেন্টটি ডিফল্ট niceness এ যুক্ত হয়েছে যা -20 এবং 19-এর মধ্যে পরিবর্তিত হয় 39 আমি 39 ব্যবহার করেছি যাতে এটি আসল প্রকৃতিটি নির্বিশেষে এটি খুব সুন্দর হবে।


2

চিবির্গ দ্বারা মন্তব্য করা হিসাবে, লোড প্রতিটি ফাইলের জন্য আরএম শুরু করার কারণে হয়। আমি উত্তরটি লক্ষ্য করেছি যেখানে tmpwatchবিকল্প হিসাবে পরামর্শ দেওয়া হয়েছে, যা আমি নিশ্চিত যে ভালভাবে কাজ করে। তবে এটি প্রয়োজনীয় নয়।

আপনি যদি এই জাতীয় যুক্তিগুলির তালিকার মধ্যে পাওয়া ফাইলগুলিকে জমা করতে বলেন তবে এটি একবার কার্যকর করতে দেওয়া আদেশটি চালাতে পারে:

find /path -name "*.moo" -exec rm {} \+

এটি কখনও কখনও কাজ করতে ব্যর্থ হতে পারে কারণ আর্গুমেন্টের তালিকাটি শেল (getconf ARG_MAX) দ্বারা অনুমোদিত সর্বোচ্চের চেয়ে (বাইটে) বড় হতে পারে grow এটি xargs দ্বারা -L বিকল্পের সাহায্যে সমাধান করা যেতে পারে।

এই উদাহরণ বিবেচনা করুন:

$ echo 0 > /tmp/it; 
$ for i in {0..15000};do echo $i;done  |\
    xargs --no-run-if-empty -L 5000 ./tmp/xr.sh 
Iteration=0; running with 5000 arguments
Iteration=1; running with 5000 arguments
Iteration=2; running with 5000 arguments
Iteration=3; running with 1 arguments

$ cat tmp/xr.sh 
#!/bin/sh
IT=`cat /tmp/it`
echo Iteration=$IT\; running with $# arguments
let IT=IT+1
echo $IT > /tmp/it

সুতরাং অতিরিক্ত সফ্টওয়্যার ইনস্টল করার দরকার নেই, আপনার যা দরকার তা হ'ল gnu-findutils:

find /path -mtime +30 -print0 | xargs -0 -L 5000 rm 

কিছু d00d ভেবেছিল এটি খুঁজে পেতে এবং xargs- -Print0 এবং -0 যোগ করা দরকারী হবে। এই আর্গুমেন্টগুলি তাদের আদেশগুলি আর্গুমেন্টগুলি পৃথক করতে নতুন লাইন (\ n) এর পরিবর্তে নাল চর (\ 0) ব্যবহার করে। ফাইলের নামটিতে ফাঁকা জায়গা বা নতুন-লাইন থাকলে এটি সহায়ক।
Рахматуллин

(1) আপনার বলার দরকার নেই \+; প্লেইন +যথেষ্ট ভাল। (২) এটি "কাজ করতে ব্যর্থ হবে না কারণ যুক্তি তালিকাটি বড় হতে পারে ..."।  find  … -exec … {} +একই কাজ xargsকরবে যা করবে; এটি কমান্ডটি যতবার প্রয়োজন চালাবে। উদাহরণস্বরূপ (আপনার উদাহরণ হিসাবে), যদি আপনার 15001 এবং 20000 এর মধ্যে ফাইল থাকে findতবে -exec'ডি প্রোগ্রাম ( rm) চারবার চালাবেন ।
জি-ম্যান
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.