【Linux】find コマンド【図解】

find コマンドの使い方について解説します。

環境は「CentOS 6 系」もしくは「CentOS 7 系」です。

 

 

過去のファイルを削除する

find コマンドの使い方として多いのではないでしょうか。

 

個人的には以下の使い方をしているエンジニアが多いと思います。

 

バックアップスクリプトでよく利用する find コマンドのオプションは「-mtime」ですが、他にも以下の種類のオプションがあります。

 

「time」「min」の 2 種類があり、「m」「a」「c」の 3 種類があります。

 

 

更に期間の特定方法が 3 種類あります。

一番分かりやすくてよく使う「-mtime」で説明します。

現在時刻を「現在」とすると、以下のようになります。

 

find コマンドの「-mtime」「+「-」を言葉で説明すると非常に分かりやすいので図にしてみました。

注意点は、「コマンドを実行した時刻が基準となる」というところです。

つまり、朝 07:00「find ./backup -mtime -5 -delete」コマンドを実行すると 2018年5月8日の「07:00」までが対象になります。 

※00:00が基準ではありません。実行した時刻です。

【Linux】findコマンドの詳細な解説

 

 

タイムスタンプが異なるファイルをいくつか作成します。

[root@SAKURA_VPS test]# touch -t 05130700 2018-0513-0700 
[root@SAKURA_VPS test]# touch -t 05120700 2018-0512-0700 
[root@SAKURA_VPS test]# touch -t 05110700 2018-0511-0700 
[root@SAKURA_VPS test]# touch -t 05100700 2018-0510-0700 
[root@SAKURA_VPS test]# touch -t 05090700 2018-0509-0700 
[root@SAKURA_VPS test]# touch -t 05080700 2018-0508-0700 
[root@SAKURA_VPS test]# touch -t 05070700 2018-0507-0700 
[root@SAKURA_VPS test]# touch -t 05060700 2018-0506-0700 
[root@SAKURA_VPS test]# ls -l 
合計 0 
-rw-r--r-- 1 root root 0  5月  6 07:00 2018-0506-0700 
-rw-r--r-- 1 root root 0  5月  7 07:00 2018-0507-0700 
-rw-r--r-- 1 root root 0  5月  8 07:00 2018-0508-0700 
-rw-r--r-- 1 root root 0  5月  9 07:00 2018-0509-0700 
-rw-r--r-- 1 root root 0  5月 10 07:00 2018-0510-0700 
-rw-r--r-- 1 root root 0  5月 11 07:00 2018-0511-0700 
-rw-r--r-- 1 root root 0  5月 12 07:00 2018-0512-0700 
-rw-r--r-- 1 root root 0  5月 13 07:00 2018-0513-0700 
[root@SAKURA_VPS test]#

 

 

以下のコマンドを実行してみます。

コマンド実行時間は「2018年5月13日22:30」です。

find . -mtime -5

find . -mtime 5 

find . -mtime +5 

[root@SAKURA_VPS test]# date
2018年 5月 13日 日曜日 22:29:42 JST

[root@SAKURA_VPS test]# find . -mtime -5 

./2018-0513-0700 
./2018-0512-0700 
./2018-0511-0700 
./2018-0510-0700 
./2018-0509-0700 
[root@SAKURA_VPS test]# find . -mtime 5 
./2018-0508-0700 
[root@SAKURA_VPS test]# find . -mtime +5 
./2018-0507-0700 
./2018-0506-0700 
[root@SAKURA_VPS test]#

 

コマンド実行結果と下図の期間を比べてみてください。コマンドの実行結果が図の期間で出力されていることが分かります。

【Linux】findコマンドの詳細な解説

 

 

-daystart オプションもあるが、便利だが少々ややこしいので注意

先ほどコマンドを実行した時間を基準とすると解説しましたが、他に「-daystart」オプションがあります。

この「-daystart」オプションが便利ですが、少々ややこしい(メンバー間でヒューマンエラーを確実に発生させる)ので注意が必要です。

まずは「man find」の画面のスナップショットです。

【Linux】findコマンドの詳細な解説

この man コマンドの結果を素直に読むと、以下の 2 つの説明があります。

 

当たり前ですが「00:00」「24:00」では 1 日異なります。

この「-daystart」オプションの解釈の仕方がメンバー間で異なると様々な障害・トラブルを引き起こしそうです。

※一番いい方法は、このようなメンバー間で確実に認識の違いを生み出すようなややこしい設定は使わないようにすることです。

 

実際に動作確認をしてみます。

タイムスタンプが異なるファイルをいくつか作成します。

[root@SAKURA_VPS test]# touch -t 05130700 2018-0513-0700 
[root@SAKURA_VPS test]# touch -t 05120700 2018-0512-0700 
[root@SAKURA_VPS test]# touch -t 05110700 2018-0511-0700 
[root@SAKURA_VPS test]# touch -t 05100700 2018-0510-0700 
[root@SAKURA_VPS test]# touch -t 05090700 2018-0509-0700 
[root@SAKURA_VPS test]# touch -t 05080700 2018-0508-0700 
[root@SAKURA_VPS test]# touch -t 05070700 2018-0507-0700 
[root@SAKURA_VPS test]# touch -t 05060700 2018-0506-0700 
[root@SAKURA_VPS test]# ls -l 
合計 0 
-rw-r--r-- 1 root root 0  5月  6 07:00 2018-0506-0700 
-rw-r--r-- 1 root root 0  5月  7 07:00 2018-0507-0700 
-rw-r--r-- 1 root root 0  5月  8 07:00 2018-0508-0700 
-rw-r--r-- 1 root root 0  5月  9 07:00 2018-0509-0700 
-rw-r--r-- 1 root root 0  5月 10 07:00 2018-0510-0700 
-rw-r--r-- 1 root root 0  5月 11 07:00 2018-0511-0700 
-rw-r--r-- 1 root root 0  5月 12 07:00 2018-0512-0700 
-rw-r--r-- 1 root root 0  5月 13 07:00 2018-0513-0700 
[root@SAKURA_VPS test]#

 

 

以下のコマンドを実行してみます。

コマンドを実行した時刻は「2018年5月13日23:38」です。

[root@SAKURA_VPS test]# date
2018年 5月 13日 日曜日 23:38:52 JST

[root@SAKURA_VPS test]# find . -daystart -mtime -5 

./2018-0513-0700 
./2018-0512-0700 
./2018-0511-0700 
./2018-0510-0700 
./2018-0509-0700 
[root@SAKURA_VPS test]# find . -daystart -mtime 5 
./2018-0508-0700 
[root@SAKURA_VPS test]# find . -daystart -mtime +5 
./2018-0507-0700 
./2018-0506-0700 
[root@SAKURA_VPS test]#

 

コマンド実行結果が下図の期間と一致していることを確認します。

【Linux】findコマンドの詳細な解説

 

結論

man コマンドの結果を素直に読むと、以下の 2 つの説明がありました。

 

実際にコマンドを実行して動作検証をしてみたところ、動作的には「-daystart を指定すると、時間計算の基準が今日の 24:00 になる。」が正しいことが分かりました。

 

 

まとめ

図解と実際にファイルを作成してコマンドを実行してみたことで自分自身も find コマンドの期間の指定方法について整理できました。

特にメンバーが多くいるような組織の場合はキチンと図解して認識を統一しておかないと様々なトラブルが発生します。

 

 

Posted by 100%レンタルサーバーを使いこなすサイト管理人