findコマンドで古いファイルを見つけて削除する方法

こんにちは、さるまりんです。

前回、ディスクが一杯にになった時、どこで容量をとっているかを探す方法をメモしました。今回はその後にスペースを空けるためにファイルを削除する時に使うコマンドのメモです。

lsコマンドはファイルの一覧を表示します。

$ ls -lt
total 2996
-rw-r--r-- 1 root root   18215 Jun 24 05:48 access_log
-rw-r--r-- 1 root root    6849 Jun 24 03:21 error_log
-rw-r--r-- 1 root root   40495 Jun 23 03:20 error_log-20190623
-rw-r--r-- 1 root root 1285272 Jun 23 00:41 access_log-20190623
-rw-r--r-- 1 root root   19701 Jun 16 03:33 error_log-20190616
-rw-r--r-- 1 root root  393064 Jun 16 03:17 access_log-20190616
-rw-r--r-- 1 root root   98336 Jun  9 03:48 error_log-20190609
-rw-r--r-- 1 root root  779982 Jun  9 03:42 access_log-20190609
-rw-r--r-- 1 root root   22414 Jun  2 03:31 error_log-20190602
-rw-r--r-- 1 root root  357798 Jun  2 03:05 access_log-20190602

-ltオプションをつけています。-lで詳細を表示して、-tで更新の新しい順に並べています。-lはlongの意味だそうです。-tはtimeかな?

これでもわかると言えばわかるのですが、一気にファイルを見つけて削除できたら便利ですよね。

それにはfindコマンドを使います。

例えば3日前より古いファイルを探すには次のようにします。

find . -mtime +3 -type f

上のディレクトリで実行するとこうなります。

$ find . -mtime +3 -type f
./access_log-20190602
./error_log-20190616
./error_log-20190602
./access_log-20190616
./error_log-20190609
./access_log-20190609

accessログだけに絞るとこうです。

$ find . -mtime +3 -type f -name 'access_log*'
./access_log-20190602
./access_log-20190616
./access_log-20190609

削除

これとrmコマンドを組み合わせて削除します。

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

findで見つかった結果をrmコマンドに渡して削除です。

rmコマンドの-fオプションは確認なし、消せなくてもエラーメッセージ表示なしで処理しますので、注意して使わないとヤバいということになります。

移動

いやいや、いきなり消すのは不安という場合はmvコマンドで移動です。

find . -mtime +3 -type f | xargs mv --target-directory=/tmp

上のコマンドで見つかったファイルを/tmp以下に移動します。

圧縮

tarコマンドで圧縮することもできます。

find . -mtime +3 -type f | xargs tar zcvf files.tar.gz

上記で見つかったファイルをfiles.tar.gzに圧縮します。

コマンドの組み合わせってパズルのようで面白いです。

覚えると便利になりそう。勉強になります。

読んでくださってありがとうございます。

それではまた!