連載
» 2016年07月12日 05時00分 UPDATE

Linux基本コマンドTips(31):【 find 】コマンド(基本編)――ファイルをさまざまな条件で検索する

本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、「find」コマンドです。

[西村めぐみ,@IT]
「Linux基本コマンドTips」のインデックス

Linux基本コマンドTips一覧

 本連載では、Linuxの基本的なコマンドについて、基本的な書式からオプション、具体的な実行例までを分かりやすく紹介していきます。今回は、ファイルをさまざまな条件で検索する「find」コマンドの基本編です。

findコマンドとは?

 「find」は、場所を指定してファイルを検索するコマンドです。ファイル名だけではなく、ファイルの種類や更新日時など、細かい条件を指定して検索することができます。また、見つけたファイルに対して「アクション(コマンド)」を実行させることも可能です。


findコマンドの書式

find [オプション] [検索パス] [検索式]

※[ ]は省略可能な引数を示しています



findコマンドの主なオプション

 findコマンドの主なオプションは次の通りです。

オプション 意味
-P シンボリックリンクをたどらない(デフォルト)
-L 全てのシンボリックリンクをたどる
-H コマンドラインで指定したシンボリックリンクをたどる
-D オプション 診断用の情報(デバッグ情報)を出力する。オプションには次の文字列が入る
help:デバッグ用オプションの説明を表示
tree:検索式を構造化した情報
stat:statやlstatを使ってファイルを調べたときのメッセージ
opt:検索式を最適化する際の情報
rates:各処理の成功した回数と失敗した回数を表示
-Oレベル 最適化レベル。「-O1」はファイル名による判別を先に行う(デフォルト)。「-O2」「-O3」では別の判定を先に行うなどで処理を高速化する


ファイルを名前で検索する

 findはファイルを検索するコマンドですが、「」を使うことで複数の条件を組み合わせたり、コマンドを実行させたりすることができます。

 例えば、最もシンプルに「find」だけを実行するとカレントディレクトリ以下の全ファイルが、「find /etc」では「/etc」ディレクトリにある全てのファイルが表示されます。

 ファイル名を指定して検索する場合は、「-name」オプションを使います。例えば、ホームディレクトリ下で名前に「bash」を含むファイルを検索する場合は、「find ~ -name "*bash*"」と指定します(画面1)。カレントディレクトリがホームディレクトリの場合は、「~」を省略できます。

コマンド実行例

find ~ -name "*bash*"


画面1 画面1 ファイル名を指定して検索する場合は、「-name」オプションを使用する

 なお、ファイル名部分にワイルドカードを指定しない場合は、「-name bashrc」のように引用符(")を付けなくても構いません。「*bash*」の指定ではシェルが展開してしまう可能性があるので、それを防ぐために引用符を付け、「-name "*bash*"」のように指定しています。

 大小文字を区別したくない場合は「-name」の代わりに「-iname」オプションを、正規表現を使う場合は「-regex」オプションを使用します。



検索するファイルの種類を指定する

 「-name」や「-iname」「-regex」オプションで名前を指定した場合は、該当する名前のファイルだけではなく、ディレクトリも検索されます。ファイルだけを対象としたい場合は「-type f」オプション、ディレクトリを対象としたい場合は「-type d」オプション、シンボリックリンクを対象とするならば「-type l」オプションを使用します。

 例えば、「find / -name profile -type f」を実行すると、ルートディレクトリ下(つまりシステム全体)から「profile」という名前のファイルが検索されます。

 なお、検索場所に「/」を指定すると、権限のない場所も検索されて大量のエラーメッセージが表示されるので、「2>/dev/null」でエラーメッセージを“捨てる”(ヌルデバイスにリダイレクト)とよいでしょう。

 以下の画面2の実行例では、「-type f」オプションの指定あり/なしで結果を比較しています。

コマンド実行例

find / -name profile -type f 2>/dev/null


画面2 画面2 ファイルだけを検索の対象としたい場合は「-type f」オプションを使用する


出力内容を変更する(lsコマンドを実行する)

 findコマンドでは、検索式の他に「アクション」を指定して、コマンドを実行させることができます。デフォルトでは「-print」が実行されており、これは「ファイル名を表示する」というアクションになります。

 「-ls」というアクションを指定すると、ファイルの詳しい情報が表示されます。これは「ls -dils」コマンド相当で表示される情報で、ファイルサイズなどが含まれるためにかなり長くなります。「ls -dF」くらいの情報量でよい場合は「-exec」アクションを使い、「-exec ls -dF {} ;」のように指定します。

 execアクションは「-exec コマンド オプション {} ;」のように指定します。{}部分には、検索されたファイル名が入ります。ファイル名やディレクトリ名がそのまま入るので、lsコマンドは「-F」オプション(ファイルの種類によって「/」記号や「@」記号を付けて表示するオプション)だけではなく、ディレクトリそのものの情報を表示する「-d」オプションも付けています。

 最後の「;」で、execアクションに対するコマンドの終わりを示します。コマンドラインでは「;」がコマンドの区切りとして機能してしまうため、実際に実行する際は「\;」のように指定します。直前に空白が必要な点も注意してください。

 ここまでの説明をまとめると、次のようになります。

 ここでは、「ルートディレクトリ下で名前がprofileであるものを探し、(1)では、-lsアクションで詳しい情報を表示する、(2)では、-execアクションでls -dFを実行する」という内容を指定しています。画面3の実行例は、以下の(2)のコマンドです。

コマンド実行例

find / -name profile -ls 2>/dev/null (1)

find / -name profile -exec ls -dF {} \; 2>/dev/null (2)


画面3 画面3 findコマンドの実行結果に「-exec」アクションを指定して「ls -dF」を実行する


筆者紹介

西村 めぐみ(にしむら めぐみ)

PC-9801N/PC-386MからのDOSユーザー。1992年より生産管理のパッケージソフトウェアの開発およびサポート業務を担当。のち退社し、専業ライターとして活動を開始。著書に『図解でわかるLinux』『らぶらぶLinuxシリーズ』『はじめてでもわかるSQLとデータ設計』『シェルの基本テクニック』など。2011年より、地方自治体の在宅就業支援事業にてPC基礎およびMicrosoft Office関連の教材作成およびeラーニング指導を担当。


Copyright© 2017 ITmedia, Inc. All Rights Reserved.

@IT Special

- PR -

TechTargetジャパン

この記事に関連するホワイトペーパー

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。