文字列で一致検索する find
WindowsのコマンドとLinuxのコマンドには同じ名前のものがある。同じ名前で機能も同じであればよいのだが、同じ名前でまったく機能が異なるものがある。そうしたコマンドのひとつにfindコマンドがある。
findコマンドはLinuxではファイルやディレクトリを探すためのコマンドだ。基本的に名前で検索を行い、再帰的に指定したディレクトリ下に一致するファイルやディレクトリがあるかを検索する。豊富なオプションを持っておりさまざまな条件で検索できるほか、検索に一致したファイルに対して任意のコマンドを実行するための機能も用意されている。頻用され、かつ、オプションが豊富なコマンドのひとつだ。
Windowsにもfindコマンドが存在しているのだが、WindowsのfindコマンドはLinuxのfindコマンドとはかなり異なる。WindowsのfindコマンドはLinuxにおけるgrepコマンドに近いものがあり、ファイルが指定された場合には指定された文字列が含まれている行を出力する。パイプラインで接続された場合には、パイプライン経由で送られてくるテキストデータに対してgrepコマンドのように一致する文字列を含む行だけを出力する。
findコマンドの基本的な使い方は次のようになる。一致させる文字列と、処理対象となるファイルパスを指定する。パイプラインで接続した場合にはファイルを指定する必要はない。
findコマンドの使い方
find [/v] [/c] [/n] [/i] [/off[line]] "文字列" [[ドライブ:][パス]ファイル名[...]]
findコマンドで指定できるパラメータやキーワードは次のとおり。
パラメータ | 内容 |
---|---|
/v | 指定した文字列を含んでいる行だけを表示せず、それ以外を表示する |
/c | 指定した文字列を含んでいる行の数をカウントして出力 |
/n | 出力する行の先頭に行番号を付与する |
/i | 文字列を大文字と小文字を区別せずにマッチング処理する |
文字列 | 一致対象とする文字列を指定する。文字列はダブルクォーテーションで囲む必要がある。ダブルクォーテーションそのものを対象として含めたい場合には”“と指定する |
findコマンドは基本的にアルファベットの大文字小文字を区別して動作する。パラメータとして/iを指定すると、大文字と小文字を区別しないようになる。あとはパラメータとして/vを使用すると、一致した行だけが表示されなくなる。つまり、特定の行だけを削除したいといった場合に利用できる。/cは行数をカウントして出力、/nは行番号の出力という指定だ。
findコマンドではキーワードとして指定する文字列をかならずダブルクォーテーションで囲む必要がある。このため、キーワードにダブルクォーテーションそのものを含めたい場合には工夫が必要だ。その場合にはダブルクォーテーションを2つ続けて「”“」と書く。これで1つのダブルクォーテーションとして認識されるようになる。
findコマンドを使ってみよう
findコマンドのもっとも基本的な使い方は「find “キーワード” ファイル」だ。実行すると次のように指定した文字列が含まれている行だけが出力されることを確認できる。大文字と小文字は区別されており、別のキーワードとして一致対象になっていることもわかる。
findコマンドにパラメータとして/iを指定すると、次のように先ほどの検索結果がすべて出力されることがわかる。/iを指定すると大文字と小文字を区別しないで検索するようになるためだ。
findコマンドはパイプラインで接続することでコマンド出力をフィルタリングできる。たとえば、dirコマンドで次のような出力が得られたとする。
dirコマンドにfind “DIR”を接続すると、次のようにDIRが含まれている行だけが出力されるようになる。
同じようにfind “DIR”でフィルタリングするものの、今度は次のように/vパラメータを指定してみる。こうすると今度は一致した行だけが表示されなくなる。
つまりfindとfind /vは排他的な関係にあることがわかる。
findで一つ上のコマンドプロンプト利用を
Linuxでgrepコマンドはもっとも利用するコマンドのひとつだ。CUIベースの操作ではテキストの出力が操作の大きな割合を占めるわけだが、grepコマンドを使うことで欲しいデータだけに絞ることができる。テキスト処理はCUI作業の大きなポイントであり、grepを使うこなすことはそのままCUI作業の効率を引き上げることにつながる。
同じことはfindコマンドにも言える。findコマンドを利用することでコンソールウィンドウに出力されるテキストを抑えることができ、必要な情報だけを得やすくなる。多くのテキストの中から必要になるデータを目で追うというのは、不確実だし非効率だ。findコマンドをうまく活用して欲しい情報をピンポイントで取得して活用していこう。