Linuxで任意のファイル/ディレクトリを探す方法
本ページではLinux上で任意のファイルあるいはディレクトリを検索する方法について説明します。利用するコマンドはPOSIXコマンドであるためMacでも利用可能だと思います。
方法#
find を利用します。
現在のディレクトリ ( . ) および現在のディレクトリに含まれるすべてのサブフォルダのどこかにある test.txt というファイルを検索したい場合には以下のコマンドを実行します。
find . -name "test.txt"
同じく、 *.txt という拡張子が .txt のファイルを検索したい場合には以下のコマンドを実行します。
find . -name "*.txt"
同じく、 test という ファイル を検索したい場合には以下のコマンドを実行します。
find . -type f -name "test"
同じく、 test という ディレクトリ を検索したい場合には以下のコマンドを実行します。
find . -type d -name "test"
現在のディレクトリではなく、 /etc 以下のすべてのディレクトリに対して test を検索したい場合には以下のコマンドを実行します。
find /etc -name "test"
説明#
find コマンドはその名の通りファイルやディレクトリ[1] を検索するために利用されるコマンドです。よく利用されるコマンドの書式は以下の通りです[2] 。
find [starting-point...] [expression]
starting-point#
検索を行う対象のディレクトリを指定します。省略した場合には現在のディレクトリ ( . ) が指定されます。
本オプションには複数の値を指定することが可能です。例えば work/ と etc/ というディレクトリを検索したい場合には以下のように2つ並べることで両方を検索対象とすることができます。
find work/ etc/ -name test
expression#
expression には非常に多くの設定を行うことができるのですが、ここでは上記で紹介したものにとどめます。
-name#
本オプションの後に検索したいファイル名を指定します。検索対象のファイル名には bash で利用されるパターンが利用できます。以下のパターンを利用する場合にはダブルクオーテーションで囲った方が安全です。
特殊文字 | 意味 |
* | すべての文字列 |
? | 任意の1文字 |
[abc] | カッコ内のいずれかの1文字 |
[!abc] | カッコ内のいずれかの1文字以外 |
本オプションで指定する際にディレクトリ名称を含めることはできません。例えば path というディレクトリの下に存在する test というファイルを検索したい場合には path/test と検索したいところですがこれはうまくいきません。この場合には -path を利用して以下のようにします。
find . -path "*path/test"
-type#
本オプションによって検索対象のファイルの種別を選別することができます。Linux/Unixで利用される色々なファイルを指定することができますが、実際のところ利用するのは -f と -d 程度だと思います。以下に一覧を掲載します。
指定文字 | 意味 |
c | special character file |
d | ディレクトリ |
p | 名前付きパイプ |
f | 通常のファイル |
l | シンボリックリンク[3] |
s | ソケットファイル |
D | door (Solaris) |