一定数の新しいディレクトリを残して、古いものだけ削除する。例えばこんなときに、
$ ll -d upload_* drwxr-xr-x 2 apache apache 4096 2月 15 20:21 upload_1266232894 drwxr-xr-x 2 apache apache 4096 2月 15 20:26 upload_1266233148 drwxr-xr-x 2 apache apache 4096 2月 15 20:29 upload_1266233372 drwxr-xr-x 2 apache apache 4096 2月 15 20:37 upload_1266233808 drwxr-xr-x 2 apache apache 4096 2月 15 20:40 upload_1266234035 drwxr-xr-x 2 apache apache 4096 2月 15 21:02 upload_1266235350 drwxr-xr-x 2 apache apache 4096 2月 15 21:05 upload_1266235518 drwxr-xr-x 2 apache apache 4096 2月 15 21:07 upload_1266235658 drwxr-xr-x 2 apache apache 4096 2月 15 21:14 upload_1266236074
新しい3個だけ残して後は全て削除するときはこうする。
$ find -maxdepth 1 -name 'upload_*' | sort | head -n -3 | xargs rm -fr
事前に削除するファイルを確認したいときは-printf
オプション。
$ find -maxdepth 1 -name 'upload_*' -printf '%p ; %t\n' | sort | head -n -3 ./upload_1266232894 ; Mon Feb 15 20:21:52 2010 ./upload_1266233148 ; Mon Feb 15 20:26:06 2010 ./upload_1266233372 ; Mon Feb 15 20:29:49 2010 ./upload_1266233808 ; Mon Feb 15 20:37:10 2010 ./upload_1266234035 ; Mon Feb 15 20:40:54 2010 ./upload_1266235350 ; Mon Feb 15 21:02:49 2010
単純に一日(24時間)以上前のものを削除するだけなら、
$ find -maxdepth 1 -mtime +0 -name 'upload_*' -printf '%p ; %t\n' -exec rm -fr {} \;
-mtime
オプションの引数は実際の日数より一つ少ないものを指定する。-exec
オプションはセミコロンで終わるが、バックスラッシュ(円マーク)でエスケープしないとシェルに検知されてしまう。- 日単位ではなく、分単位で指定するときは
-mtime
オプションではなく、-mmin
オプションを使う。