findコマンドは、検索対象として複数のファイルやディレクトリを検索するコマンドです。
ファイルの種類や更新日時など、細かい条件を指定して検索が可能な、多機能なコマンドです。
findコマンドの基本
findコマンドの基本的な機能は、日本語で、「見つける」の名の通り、目的のディレクトリやファイルを見つける検索のコマンドです。
基本的な書式は、以下の通りになります。
$ find ファイル名
対象ディレクトリ以外にいれば、検索したいディレクトリの場所とファイル名を指定します。
$ find ディレクトリの場所とファイル名
前提として、以下の通り、workディレクトリ内には、test01から05.txtが存在してます。
$ ls -l /work
合計 0
-rw-r–r–. 1 root root 0 8月 5 23:56 test01.txt
-rw-r–r–. 1 root root 0 8月 5 23:56 test02.txt
-rw-r–r–. 1 root root 0 8月 5 23:56 test03.txt
-rw-r–r–. 1 root root 0 8月 5 23:56 test04.txt
-rw-r–r–. 1 root root 0 8月 5 23:56 test05.txt
$
例えば、workディレクトリ内のtest05を検索する場合は、以下の通りになります。
$ find /work/test05.txt
また、検索するファイルがない場合は、日本語であれば、「そのようなファイルやディレクトリはありません」とメッセージがでます。また、英語であれば、「no such file or directory」になります。
findコマンドのオプション
findコマンドのオプションは、良く利用されるものだけ、記載します。
オプション -name
ワイルドカードを使用して、ファイルやディレクトリ名の一部のみ指定した検索ができます。
オプション -mtime
任意の日数に更新されたファイルやディレクトリを検索します。
オプション -empty
ファイル容量が空のファイルやディレクトリを対象とし検索します。
オプション -or
複数の条件を使って、いずれかの条件に当てはまるファイルやディレクトリを検索します。
-nameオプション:ワイルドカードを使用して、ファイルやディレクトリ名の一部のみを指定し検索する
ファイル名やディレクトリ名が一部しかわからない場合でもワイルドカードを使って検索できます。
ワイルドカード使用する場合は、直前に「\」でエスケープしないとエラーや想定した動作にならないことがありますので、指定するようにしましょう。
基本的な書式は、以下の通りになります。
$ find 検索先 -name ファイル名
例えば、workディレクトリ内のファイルが不明で番号の2のファイルを検索する場合は、 以下の通りになります。
$ find /work -name \*2\*
findコマンドのオプションでは、-nameとワイルドカードの組み合わせが一番使用されます。
例えば、インストールされたOSのデフォルトのRPMパッケージのバージョンが知りたい場合に、ルートを指定して、検索すれば、良いので便利です。
-mtimeオプション:任意の日数に更新されたファイルやディレクトリを検索する
mtimeは、ファイルの内容を書き換えた日時です。
そのため、-mtimeオプションは、指定した日に変更を行ったファイルやディレクトリを検索できるオプションです。
基本的な書式は、以下の通りになります。
$ find -mtime 日数
例えば、指定した日数は、今日が0、昨日が1になります。
今日変更を行ったファイルを検索する場合は、以下の通りになります。
$ find -mtime 0
本日の作業でどのファイルを更新したのかを確認したい場合に便利です。
また、任意の日数以内に変更を行ったファイルをすべて表示したい場合は、日数に-を付けます。
10日以内に変更されたファイルを検索する場合は、 以下の通りになります。
$ find ./work/ -mtime -10
-emptyオプション:ファイルやディレクトリの容量がないものを検索する
基本的な書式は、以下の通りになります。
$ find 検索場所 -empty
workディレクトリ内のファイル容量が0のものを検索する場合は、 以下の通りになります。
$ find /work/ -empty
-orオプション:複数の条件を使って、いずれかの条件に当てはまるファイルやディレクトリを検索する
基本的な書式は、以下の通りになります。
$ find 検索元 検索条件1 -or 検索条件2
workディレクトリ内の2または、4が入っているファイルを検索する場合は、以下の通りになります。
find /work/ -name \*4\* -or -name \*2\*