masalibの日記

システム開発、運用と猫の写真ブログです

Windowsで一定期間経過した古いファイル削除

Windowsコマンドライン
特定の時間経過したファイルを削除するというのが簡単にできた

そのコマンドはforfilesです

コマンドの詳細は下記参照
http://www.atmarkit.co.jp/ait/articles/0902/27/news132.html

コマンド以下のとおりです
簡単です

forfiles /p XXXXXXXXXXXXXX\logs /d -n /c "cmd /c del @path"


コマンドの解説
 /P はパス名を記載するパラメータ

 XXXXXXXXXXXXXX\logsは取得するフォルダ
 .にするとカレントフォルダになる

 /dは日付指定
-nは数字と日付の指定ができます
 数字の場合はn日前のファイルになるそうです

 日付指定の場合はyyyy/mm/dd/指定
 -2016/01/01は2016/01/01以前のファイルを取得
 +2016/01/01は2016/01/01以降のファイルを取得

 /cは取得したファイルに対してコマンド実行できます
 自分の例は削除しています
 参考にしたサイトだと
 cmd /c del @file
 だったのですが、カレントディレクトリなのか、どうかわかりづらいので
 フルパスにしました
 cmd /c del @path


実際の実行したコマンドは以下のとおりです

forfiles /p ”E:\backuptool\logs /d -5 /c "cmd /c del @path"

バックアップ処理の実行ログが毎日100Mぐらいでるのですが
はっきりいってバックアップの実行ログなんて
ほぼ見ません
バックアップの処理のあとにこのバッチを実行することで
いらないログを消しています

ちなみに
WindowsServer2003から使えたのですが
知らなかったwwww

追記:このコマンドはネットワークドライブに対しては実行できないみたい
サーバー内でやれよってことかな


ちょっとちがうけど
linuxの場合はfindでけしている

#!/bin/bash

# 過去ログファイルの削除
# centos 5.x
find /var/logs/XXXXX/*.gz -mtime +7 -exec rm {} \;

# centos 6.x
find /var/logs/XXXXX/*.gz -mtime +7 |  xargs rm