ここから本文です

1分で解説、きょうのLinux基本コマンド講座:「find」コマンド(基本編)

@IT 7月12日(火)6時10分配信

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

【その他の応用例】ファイルだけを検索の対象としたい場合は「-type f」オプションを使用する

●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*"

 なお、ファイル名部分にワイルドカードを指定しない場合は、「-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」でエラーメッセージを“捨てる”(ヌルデバイスにリダイレクト)とよいでしょう。

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

○コマンド実行例

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


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

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

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

・[参考]lsコマンド――ファイルを一覧表示する(本連載 第26回)

 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)


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

最終更新:7月12日(火)6時10分

@IT

TEDカンファレンスのプレゼンテーション動画

暗闇で光るサメと驚くほど美しい海洋生物たち
波のほんの数メートル下で、海洋生物学者であり、ナショナルジオグラフィックのエクスプローラーかつ写真家のデビッド・グルーバーは、素晴らしいものを発見しました。海の薄暗い青い光の中で様々な色の蛍光を発する驚くべき新しい海洋生物たちです。彼と一緒に生体蛍光のサメ、タツノオトシゴ、ウミガメ、その他の海洋生物を探し求める旅に出て、この光る生物たちがどのように私たちの脳への新たな理解を明らかにしたのかを探りましょう。[new]