Linux でハウスキーピング
find で -mtime
で最終更新日N日前でフィルタして rm できます。
find /log/*.log -type f -mtime +10 | xargs rm -rf
BSD系などで -delete
アクションがあれば以下でも可です。
find /log/*.log -type f -mtime +10 -delete
crontab にでも登録しておけば終わりです。
シェルスクリプトにしてディレクトリ指定を変数に、なんてことは大事故に繋がるのでくれぐれもしないようにしましょう。
Windowsでハウスキーピング
forfiles コマンドで find 相当ができます。
forfiles /P "C:\log" /S /M *.log /D -10 /C "cmd /c del @path"
指定した条件のパスが @path
で取れるので、del
コマンドの引数に指定しています。
/P
で検索パスを指定/S
でサブフォルダも対象/M *.log
でマスク指定。指定しない場合は*
となる/D -10
で更新日付が10日より古いものを選択
きもちわるいですね。
定期実行するには(at コマンドは古いので) schtasks に登録します。
コマンドラインインターフェースは、
SCHTASKS /Create [/S <システム> [/U <ユーザー名> [/P [<パスワード>]]]] [/RU <ユーザー名> [/RP <パスワード>]] /SC <スケジュール> [/MO <修飾子>] [/D <日>] [/M <月>] [/I <アイドル時間>] /TN <タスク名> /TR <実行するタスク> [/ST <開始時刻>] [/RI <間隔>] [ {/ET <終了時刻> | /DU <継続時間>} [/K] [/XML <XML ファイル>] [/V1]] [/SD <開始日>] [/ED <終了日>] [/IT] [/Z] [/F]
こっちもきもちが悪いのでタスクスケジューラの GUI から登録しましょう。
batファイルにして、
@if "%DEBUG%" == "" @echo off forfiles /P "C:\log" /S /M *.log /D -10 /C "cmd /c del @path"
基本タスクの作成から登録すればOKです。