ひとり勉強ログ

ITエンジニアの勉強したことメモ

Linuxでの検索コマンド【find】【locate】の使い方

findコマンド

ファイル名newfile.txtを検索する

[bash] $ find . -name newfile.txt -print [/bash]

拡張子が「.txt」のファイルを検索する

[bash] $ find . -name '*.txt' -print [/bash]

カレントディレクトリ下にあるファイルを検索する

[bash] $ find . -type f -print [/bash]

カレントディレクトリの下にあるディレクトリを検索する

[bash] $ find . -type d -print [/bash]

カレントディレクトリの下にあるシンボリックリンクを検索する

[bash] $ find . -type l -print [/bash]

locateコマンド

locateコマンドが使用できるか確認

[bash] $ locate --version [/bash]

下記のように表示されれば使用可能

[bash] mlocate 0.26 Copyright (C) 2007 Red Hat, Inc. All rights reserved. このソフトウェアは GPL v.2 に基づいて提供されています。

このプログラムは法律が許す範囲で無保証で提供されます。 [/bash]

インストールされていたら、ファイルパス一覧をデータベースに登録するため、rootユーザになって下記コマンドを実行してデータベースを作成する。

locateコマンドは事前にファイルパスをデータベースに登録してあり、このデータベース内を検索するので高速に動作する。対してfindコマンドは実行するたびにディレクトリツリーを伝ってすべてのファイルを検索するため、locateコマンドなら一瞬で済む検索が何分もかかることも。

ただしlocateコマンドはファイルをデータベースに登録してあることが前提のコマンド。locateコマンドがインストールされていれば1日1回、自動的にデータベースにファイルを登録する設定がされている。新規で作成したばかりのファイルは、データベースに登録されていなければlocateコマンドでは検索結果に出てこない。

拡張子が「.txt」のファイルを検索

[bash] $ locate '*.txt' [/bash]

ファイル名だけを検索対象にしたい

[bash] $ locate -b php [/bash]

複数の検索パターンを指定するとOR検索になる

例:パスに「newfile」または「oldfile」のどちらかを含むものを検索する

[bash] $ locate newfile oldfile [/bash]

複数の検索パターンでAND検索にしたい場合

例:パスに「new」と「year」両方を含むものを検索する

[bash] $locate --all new year [/bash]