LoginSignup
2
6

More than 3 years have passed since last update.

find、locateコマンドまとめ

Posted at

はじめに

ファイル操作はほとんどgit grep で行っており、基本的な事をおざなりにしてしまっていたので、
もう一度復習しようと思い調べることにした。

find

findはその名の通りディレクトリーツリーからファイルを探す方法である。
基本形は下記である。

$ find (検索開始ディレクトリ)(検索条件)(アクション)

検索条件

-name

$ find . -name file-1.txt -print
./file-1.txt

その名の通り名前で検索。ただし、ワイルドカード(*?)を使う場合、Bashの変数展開で読み込まれてしまうので必ずシングルクォートまたはダブルクォートをもちいること。

※検索条件(-name)には(-iname)というものもあるが、こちらは(-name)と違って大文字小文字を区別しない。

-type

$ find . -type d -print

検索条件の(-type)もその名の通りタイプ名で検索します。
-type ddはファイル種別で、上記だと現在の位置からデレクトリだけを探すという命令になります。

なお下記のように組み合わせて使うことも可能です。(-aはAND検索で、省略可能。)

$ find . -type f -a -name '*.txt' -print

検索できるファイル種別

指定 ファイル種別
-type f 通常ファイル
-type d ディレクトリ
-type l シンボリックリンク

アクション

現在すべて-printで表示させてますが、-lsで表示すると「ls」形式で表示されます

find . -type f -a -name '*.txt' -ls
  671143      0 -rw-rw-r--   1 vagrant  vagrant         0 Apr 19 04:29 ./find/file-1.txt
  671215      0 -rw-rw-r--   1 vagrant  vagrant         0 Apr 19 04:29 ./find/file-3.txt
  671213      0 -rw-rw-r--   1 vagrant  vagrant         0 Apr 19 04:29 ./find/file-2.txt

locate

locateはfindとは違ってファイルパスが格納されているDBから検索されるため、findに比べて高速に検索することが出来ます。

インストール

Linuxに最初から入っている訳ではないので、インストールしなければなりません。

すでにあるかの確認

$ locate --version

入ってないのであればインストールしましょう。

CentOSでインストール
$ sudo yum install mlocate
Ubuntuでインストール
$ sudo apt-get install mlocate

データベースの作成

$ updatedb

上記、updatedbコマンドでデータベースが作成され、一定期間ごとにデータベースが更新されるようになります。

注意点

データベースの更新は、インストール時に一日一回のペースで更新されるように設定されています。ですので、今作ったファイルが検索に引っかかるようになるのは1日後です。また、今消したファイルも1日後までは検索に引っかかってしまいます。

locateは作成(削除)してからしばらく経った後のファイルを見つけるのに向いてるといえます。

locateで検索

$ locate bash

これでbashと名の付くファイルがすべて高速に表示されます。

検索できるファイル種別

オプション 効果
-i 大文字小文字を無視する
-b ファイル名のみ検索(ディレクトリは無視)
-A and検索(通常はor検索)

参考文献

新しいLinuxの教科書

2
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
6