Windows でハウスキーピング


f:id:Naotsugu:20170218003401p:plain

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です。