古いファイルの削除

表題の通り。`find`でN日以上前に作成されたファイルを削除したい、といった場合等に使う。

■ 環境

  • Linux

■ mtime/ctime/atime

普段は”mtime“を使用している。”ctime“はパーミッションが変わった等の時間なので、ファイル操作を行っている限りは”mtime“で特に問題はないであろう。作成日時だったり、内容変更の日時だったり。

というわけで、下記のように実行している。下記の場合は3日以上前に作成もしくは更新されたファイルの一覧を取得する場合である。

$ find . -type f -mtime +3

いつもここでハマったりするのだが、確認の為に”-ls“オプションを付けるのだが順序が問題になる。試しにローカルのファイルでやってみた場合。

$ find . -type f -ls -mtime +1
5134840      8 -rwxr-xr-x    1 withsin   staff      361 12 14 11:09 ./XXXXXXXX.sh
5134040      8 -rw-r--r--    1 withsin   staff     3274 12 14 10:57 ./XXXX.json
5471878     16 -rw-r--r--    1 withsin   staff     4468 12 19 11:16 ./XXXX.sh
5471934      8 -rw-r--r--    1 withsin   staff      743 12 19 11:17 ./README.md
$
$ find . -type f -mtime +1 -ls
5134840      8 -rwxr-xr-x    1 withsin   staff      361 12 14 11:09 ./XXXXXXXX.sh
5134040      8 -rw-r--r--    1 withsin   staff     3274 12 14 10:57 ./XXXX.json
$

-ls“の場所で結果が異なる。というか”-mtime“が効いていないようである。なので注意。

最後に削除までするには下記のように行う。

$ find . -type f -mtime +3 | xargs rm

`find`だけでもできる。

$ find . -type f -mtime +3 -exec rm {} \;

最後の” \;“をよく忘れてエラーになることが多いので前述のパイプでやることの方が多い。

以上。