Linux

Linux 古いファイルを日付を条件に削除する

大量のログファイルがたまっているディレクトリで古いファイルを削除するというような、ファイルの日付を条件に何か操作をする場合がありますがこんな時に活躍するのがfind コマンドの -mtime、-mminオプションと xargs コマンドの組み合わせです。お題では「削除」としていますが、xargsコマンドの後に何を持ってくるかによって使い方は広がりますね。

まずは以下のような条件の時
[oracle@vm013 test]$ date
2021年  8月  6日 金曜日 00:18:24 JST
[oracle@vm013 test]$ ls -lt
合計 0
-rw-r--r--. 1 oracle oinstall 0  8月  6 00:16 test0.txt
-rw-r--r--. 1 oracle oinstall 0  8月  6 00:02 test1.txt
-rw-r--r--. 1 oracle oinstall 0  8月  5 23:51 file1.txt
-rw-r--r--. 1 oracle oinstall 0  8月  5 12:00 test2.txt
-rw-r--r--. 1 oracle oinstall 0  8月  4 22:00 test3.txt
-rw-r--r--. 1 oracle oinstall 0  8月  3 22:00 test4.txt
-rw-r--r--. 1 oracle oinstall 0  8月  2 21:02 test5.txt
5分を経過したファイルを対象に「ls -lt」を実行する

ちなみに、5分以内の場合は -5 とします

find ./*.txt -mmin +5 |  xargs ls -lt

test0.txt のみ「5分を経過していない」ので表示されません。

[oracle@vm013 test]$ find ./*.txt -mmin +5 |  xargs ls -lt
-rw-r--r--. 1 oracle oinstall 0  8月  6 00:02 ./test1.txt
-rw-r--r--. 1 oracle oinstall 0  8月  5 23:51 ./file1.txt
-rw-r--r--. 1 oracle oinstall 0  8月  5 12:00 ./test2.txt
-rw-r--r--. 1 oracle oinstall 0  8月  4 22:00 ./test3.txt
-rw-r--r--. 1 oracle oinstall 0  8月  3 22:00 ./test4.txt
-rw-r--r--. 1 oracle oinstall 0  8月  2 21:02 ./test5.txt
1日以上経過したファイルを対象にする
find ./*.txt -mtime +1 |  xargs ls -lt
[oracle@vm013 test]$ find ./*.txt -mtime +1 |  xargs ls -lt
-rw-r--r--. 1 oracle oinstall 0  8月  3 22:00 ./test4.txt
-rw-r--r--. 1 oracle oinstall 0  8月  2 21:02 ./test5.txt
1日以上経過したファイルを削除する
find ./*.txt -mtime +1 |  xargs rm -R

ここではrmコマンドを使っていますが、mvコマンドを使ってフォルダ移動なんかもよく使います。

[oracle@vm013 test]$ find ./*.txt -mtime +1 |  xargs rm -R
[oracle@vm013 test]$ ls -lt
合計 0
-rw-r--r--. 1 oracle oinstall 0  8月  6 00:16 test0.txt
-rw-r--r--. 1 oracle oinstall 0  8月  6 00:02 test1.txt
-rw-r--r--. 1 oracle oinstall 0  8月  5 23:51 file1.txt
-rw-r--r--. 1 oracle oinstall 0  8月  5 12:00 test2.txt
-rw-r--r--. 1 oracle oinstall 0  8月  4 22:00 test3.txt
[oracle@vm013 test]$

スポンサーリンク