next up previous contents
: コマンドのエイリアスと tcshの設定ファイル : シェルの基本操作 : パイプとリダイレクション   目次


ファイルの検索 - find と locate -

ファイルをどこに保存したかを忘れてしまうことは良くあります。 また、アプリケーションの動作を決める設定ファイルが、システムのどこにある のかを調べたいことも良くあります。そんな時、ls コマンドで適当に捜してい ても、中々、見つかるものではありません。UNIX でファイルを検索するコマン ドが、find です。find は、実際に指定された通りにファイルシステ ムを順番に検索します。したがって、巨大なディレクトリを対象に find コマン ドを実行すると、時間がかかります。そこで、FreeBSD では、毎日(あるいは週 1回)61、全ファイルシステム中にあるファイル名のデータベースを作成しています。 それを利用すると、高速にファイル名を検索できます。そのデータベースを locateデータベース と呼び、検索コマンドは locate です。locateデー タベースの更新は、毎日かあるいは週1で行なわれますので、ファイルやディレ クトリを作成した直後は、locateデータベースに反映していません。また、 stex のホームディレクトリは、NFS(Network File System)と言う仕組みで、 すべてのクライアント計算機で共有していて、ホームディレクトリもlocateデー タベースの対象から外れています。自分のホームディレクトリ以下のファイルを 捜す場合には、find コマンドを使用して下さい62

locateデータベースは、絶対パス名(§2.3.1参照)でファイルやディレク トリの一覧を保持しています。検索条件としては、基本的に、あるキーワードを 含むファイルを検索しますが、「あるキーワードは含み、あるキーワードは含ま ない」というような場合には、grep をパイプでつないで使用すると便利です。 また、デフォルトでは、大文字と小文字を区別しますので、区別しないように検 索するためには、-i オプションの指定が必要です。

  % locate gnome | grep bin | less   (gnome と bin を含む一覧を less で表示)
  % locate gnome | grep bin | grep -v share | less 
     (gnome と bin を含み、share を含まない一覧を less で表示)
  % locate -i tgif | grep -v ports | grep -v var/db | less
    (tgifを大文字小文字の区別なく含み、ports と var/db を含まない一覧を less で表示)

find コマンドは、名前だけでなく、ファイルの更新日時やアクセス権、ファイ ル容量など、色々な条件で検索することが可能な奥の深いコマンドですが、ここ では、名前で検索する場合のみを説明します。find コマンドは、一般的に、 find 検索するディレクトリ 検索条件 [マッチした場合の処置] の順番に引数を 指定し、[マッチした場合の処置]を省略した場合は、-print(標準出力)が仮定さ れます。

  % find ./ -name "*.txt" 
      (カレントディレクトリ以下で .txt で終わるファイルを表示)
  % find ~/ -name "*exp*" | less
      (ホームディレクトリディレクトリ以下で exp を含むファイルを less で表示)