サーバにキャッシュが多く溜まっており定期的に削除したいです。
シェルスクリプトでcrontabを利用して削除しているのですが、キャッシュが多いため一度の実行で削除する数を制限したいです。
現在は、find ./cache -name \*.cache | xargs rmで削除しているのですが、例えば、200ファイル削除したら終了するといったことはどうすれば出来るのでしょうか?
それならもうPHPとかで作成した方が良いと思うよ。カスタマイズしやすいし。
200ファイル消したらーってランダムで消すんですか?作成したばかりのキャッシュを消してもまた作られると思うので、ディレクトリの階層を日付で増やしてある程度日が過ぎたものをディレクトリ毎削除していくとかどうっすか./cache/01./cache/02./cache/03
シェル初心者が挑戦してみた。
findは条件に一致したファイルのパスを返す。これをどうにかしてファイル更新日でソートできれば……→lsならソートできる!ソート結果の上から200行だけを表示できれば……→headつかえばいける!
というわけで、「古いファイルから順番に200件だけ消す」コマンドはこんな感じになりました。
find ./cache -name \*.cache | xargs ls -tr1 | head -n 200 | xargs rm
ひょっとしたらもっと効率的に消す方法があるかもしれないけど知らんもっといい方法があったら教えろ……てください
書いてから思ったけど、新しい順に並べて下から表示すれば1字減るのかな?find ./cache -name \*.cache | xargs ls -t1 | tail -n 200 | xargs rm
みんなの回答 3 件
それならもうPHPとかで作成した方が良いと思うよ。カスタマイズしやすいし。
200ファイル消したらーってランダムで消すんですか?
作成したばかりのキャッシュを消してもまた作られると思うので、
ディレクトリの階層を日付で増やしてある程度日が過ぎたものをディレクトリ毎削除していくとかどうっすか
./cache/01
./cache/02
./cache/03
シェル初心者が挑戦してみた。
findは条件に一致したファイルのパスを返す。
これをどうにかしてファイル更新日でソートできれば……
→lsならソートできる!
ソート結果の上から200行だけを表示できれば……
→headつかえばいける!
というわけで、
「古いファイルから順番に200件だけ消す」
コマンドはこんな感じになりました。
find ./cache -name \*.cache | xargs ls -tr1 | head -n 200 | xargs rm
ひょっとしたらもっと効率的に消す方法があるかもしれないけど知らん
もっといい方法があったら教えろ……てください
関連するトピックス