2009年4月21日火曜日

find で古いファイルを消す

メモエントリ
 

linux サーバ運用で、古いログやファイルをfindで洗い出す時、 mtime, mmin などのオプションを使う。
あとは exec に渡して消すなり tar で固めるなりと、好きに料理すると良い。
 

#!/bin/bash
del_oldlog(){
# $1 directory path
# $2 days
find $1 -type f -name \* -mtime +$2 -exec rm -f {} \;
}
del_oldlog $1 $2

mtime で指定する値は、狙い通りにするのはちょっとややこしい、man を見るとよい。
(追記:daystart オプションで扱いやすくなる)
 
 


ちなみにfindだけでやるより、exec の代わりに パイプで xargs に投げた方が処理的に軽いみたい。
#!/bin/bash
del_oldlog(){
# $1 directory path
# $2 days
find $1 -type f -name \* -mtime +$2 | xargs rm -f
}
del_oldlog $1 $2


量が多いと思ったらこちらを優先したい。
 
 




4.26追記:(はてブにツッコミがあったので)
findコマンドのうち、IEEE Std 1003.2(POSIX.2) の仕様にそっているものでは
"-delete" オプションというのが使えるらしい。
他、"-exec" では ;(セミコロン) でなく +(プラス) で閉じると xargs のようにまとめてコマンド実行してくれる模様。
例としては FreeBSD でつかえる find とか。