unix - ファイルを探す

findコマンド

find <検索開始ディレクトリ> <検索条件> <アクション>

検索条件

ファイル名で探す

  • -name, -iname: ファイル名を指定してファイルを探す。-nameは大文字小文字区別あり。-inameは区別なし。*, ?などのワイルドカード利用可。
  • -regex: 正規表現で検索
# example
find . -name '*.txt' -print

ワイルドカード使用の場合は、ブレース展開とされないようにシングルクオートを付けること。

ファイルの種類で探す

  • -type f: 通常ファイル
  • -type d: ディレクトリ
  • -type l: シンボリックリンク
# 例:カレントディレクトリ以下のディレクトリを列挙
find . -type d -print

複数の検索条件の指定

find . -type f -a -name "*.txt" -print

なお、-aは省略可。

locateコマンド

データベースを元に検索する。デフォルトの設定では1日1回更新。

locate [オプション] <検索パターン>
# 例: "bash"の文字列を含むパスを検索
locate bash

データベースの更新

rootユーザでupdatedbコマンドを実行

ワイルドカード検索

# 例:拡張子が'sed'のファイルパスを検索
locate '*.sed'

-i or --ignore-case

# 例:'notes'を大文字小文字区別なく検索
locate -i notes

-b or --basename

ファイル名のみ

# 例:ファイル名に'python'を含むパスを検索
locate -b python

AND検索かOR検索

  • OR検索:複数の検索パターンをスペース区切りで列挙
# 例:'bash'と'doc'をOR検索
locate bash doc
  • AND検索: -Aまたは--allオプション
# 例:'bash'と'doc'をAND検索
locate -A bash doc

Tips

出力が多い場合は、grepと組み合わせると便利。

References

  1. 【 find 】コマンド(基本編)――ファイルをさまざまな条件で検索する
  2. 【 find 】コマンド(応用編)――タイムスタンプでファイルを検索する
  3. 【 find 】コマンド(応用編その2)――検索したファイルを指定したフォーマットで表示する
  4. 【 locate 】コマンド――ファイルを名前で検索する