こんにちは、サーバーインフラエンジニアの葉です。
遅くなりましたが、明けましておめでとうございます。
本年も何卒よろしくお願いいたします。

今日は、findをご紹介します。
条件を指定してファイルやディレクトリを検索するコマンドで、検索結果を別のコマンドの引数として実行することが出来ます。

find基本的使い方

[code]
find 検索開始ディレクトリ 検索条件 コマンド
[/code]

検索条件

-name

  検索するファイルを指定。

[code]
find /home/yo -name “test
[/code]
というコマンドを実行するとき
カレントディレクトリ以下に
[code]
/home/yo/test3.txt.gz
/home/yo/test6.txt
/home/yo/test1.txt.gz
/home/yo/test5.txt
/home/yo/test2.txt.gz
/home/yo/test4.txt
[/code]
-iname file

  検索するファイル名を指定。大文字小文字を区別しない以外は -name と同じ。

-atime [+-]n
n日前にアクセスされたファイル。

-atime 2 2日前にアクセスされたファイル
-atime +2 3日以前にアクセスされたファイル
-atime -2 1日以内にアクセスされたファイル

-ctime [+-]n
n日前にファイルステータスが変更されたファイル

-ctime 2 ちょうど2日前にファイルステータスが変更されたファイル
-ctime +2 3日以前にファイルステータスが変更されたファイル
-ctime -2 1日以内にファイルステータスが変更されたファイル

-mtime [+-]n
n日前に修正されたファイル

-mtime 2 ちょうど2日前に修正されたファイル
-mtime +2 3日以前に修正されたファイル
-mtime -2 1日以内に修正されたファイル

アクション

次に検索結果を引数にして実行するのに -exec というアクションを使います。使い方は、
[code]
-exec [command] {} \;
[/code]

過去n日を除き削除してみる

ホームディレクトリ以下に yo ディレクトリで過去90日ごとのファイルを作ります。

  このディレクトリの中の 90日前より古いファイルを削除してみます。いきなり 削除するのは危険なのでまずは検索だけして、目的の結果が得られたことを確認してから削除しましょう。

[code]
find /home/yo -name “test” -exec ls –axl {} \;
[/code]
[code]
-rw-r–r– 1 root root 0 9月 1 12:00 /home/yo/test1.txt
-rw-r–r– 1 root root 0 10月 1 12:00 /home/yo/test3.txt
-rw-r–r– 1 root root 11 1月 6 17:22 /home/yo/test6.txt
-rw-r–r– 1 root root 0 12月 1 12:00 /home/yo/test5.txt
-rw-r–r– 1 root root 0 11月 1 12:00 /home/yo/test4.txt
-rw-r–r– 1 root root 0 8月 1 12:00 /home/yo/test2.txt
[/code]
今日は 1月6日なので 90日前の 11月よりも古いファイル、つまり 8、9、10月のファイルが出力されたので目的の結果が得られたことが確認できたので -exec で繋げて削除します。※-okで繋げたら削除前、削除確認あります。

[code]
find /home/yo -name “test” -exec rm -f {} \;
[/code]
もう一回検索だけして、
[code]
find /home/yo -name “test” -exec ls –axl {} \;
[/code]
[code]
-rw-r–r– 1 root root 11 1月 6 17:22 /home/yo/test6.txt
-rw-r–r– 1 root root 0 12月 1 12:00 /home/yo/test5.txt
-rw-r–r– 1 root root 0 11月 1 12:00 /home/yo/test4.txt
[/code]
成功しました。

まとめ

find コマンドは本当に便利です。特に大量ファイルを削除とか圧縮するときに、めっちゃ使いやすいです。
ぜひ使いこなしてください。