somemo's diary

プログラマ、雑記、プログラミング関係はLinkから、数式はこっちでまとめていることが多い

【Linux】findのオプションいろいろと過去ファイルの削除

ログファイルなど、一定時間以上たった必要ないものを削除するときによく使うのでメモしておきます。

find

一定日付のものを検索するにはmtimeオプションを使用します。「+,-,なし」で対象が変わってしまうので注意が必要です。また、ファイルのみに制限する場合には、typeオプションを使用します。

# 今回の用途
# 過去[11日以上]更新されていないファイルを検索する
find 対象ディレクトリ type -f -mtime +10

# おまけ
# 過去[10日ちょうど]に更新されているシンボリックリンクでないものを検索する
find 対象ディレクトリ ! -type l -mtime 10

# 過去[9日以内]に更新されているディレクトリまたは、filenameをファイル名のみに含むファイル(大文字小文字区別しない)を検索する
find 対象ディレクトリ -type d -o -iname filename -mtime -10

ファイル削除対象の受け渡し

ファイルの削除はおなじみのrmコマンドを使用します。rmコマンドに渡す引数に、findコマンドの実行結果を使用します。方法は2つです。

  • findのオプションexecを使用する
  • findの実行結果をxargsコマンドで受け取る

execオプション

findで検索されたファイルに対してコマンドを実行します。

下記は、対象ディレクトリから2階層~4階層までの過去[11日以上]更新されていないファイルを検索し、削除しています。

find 対象ディレクトリ type -f -mindepth 2 -maxdepth 4 -mtime +10 -exec rm {} \;

execのほかにも実行系オプションがあり、print・lsといった結果表示系と実行前確認ありのokがあります。

xargsコマンド

標準出力から受け取ったものを引数に、コマンドを実行します。xargsコマンドは引数が多い場合でも対処できるらしいです。

下記は、対象ディレクトリからパスを含むファイル名のうち.logで終わり、過去[11日以上]更新されていないファイルを検索し、削除しています。

find 対象ディレクトリ -regex "*.log" -mtime +10 -exec rm {} \;

findはとても便利ですが、たくさんオプションがあるので、少しずつ覚えようと思います。最後にですが、ファイル削除前には、削除対象を確認してから実行しましょう。削除してからでは遅いです・・・

参考