find ファインド

英語表記find

日本語表記ファイル検索

正式名称find

危険度注意

What does it mean?

名前、種類、時刻、サイズ、権限などの条件でファイルを検索します。検索だけでなく、見つかった対象へ処理をつなげられるのが強みです。

Command Quest

find を今日の道具にする

名前、種類、時刻、サイズ、権限などの条件でファイルを検索しま...

$ find [開始位置 ...] [式]
関連用語14
次のコマンド0
FAQ2
参照4

概要

名前、種類、時刻、サイズ、権限などの条件でファイルを検索します。検索だけでなく、見つかった対象へ処理をつなげられるのが強みです。

基本構文

find [開始位置 ...] [式]

詳細解説

findは、Linuxのファイル探索で中心になる強力なコマンドです。単なる名前検索だけでなく、種類、更新時刻、サイズ、所有者、パーミッションなど多くの条件を組み合わせて対象を絞り込めます。

さらに、見つかった結果へ-execで処理をつなげたり、print0で安全に他コマンドへ渡したりできるため、検索と一括処理を同時に行う実務の土台になります。

一方で、パターン展開の引用忘れ、探索開始位置の誤指定、-execの使い方の誤りは事故につながります。特に削除や権限変更を伴う処理では、まず-printで対象確認を行うのが基本です。

このコマンドを使う場面

特定名のファイルを探したい時、最近更新されたファイルだけ探したい時、大量ファイルへ条件付きで処理を行いたい時に使います。

まず安全に試す方法

1. find . -maxdepth 1 -type f
2. find . -name "*.conf"
3. find /etc -maxdepth 1 -type f -name "*.conf"

3分ミッション

少しでも手を動かすと定着しやすくなります。終わった項目にチェックを入れてください。

  1. テスト用ファイルを数個作成し、find . -nameで絞り込みます。

  2. 直近で作ったファイルに対してfind . -mtime -1を試し、条件式に慣れます。

資格試験との関連

  • LinuC レベル1
    範囲: 1.02 ファイル・ディレクトリの操作と管理
    根拠: official
    LinuCレベル1では、基本的なファイル管理、リンク、ファイル配置と検索が主要範囲です。findはその中核です。
  • LPIC-1
    範囲: 104.7 システムファイルの検索と正しい配置
    根拠: official
    LPIC-1では、ファイル配置、コマンド探索、基本的なファイル操作と確認が求められます。findはその土台になります。
  • 共通基礎
    範囲: Linuxコマンド基礎
    根拠: editorial
    試験横断で、findはコマンドライン操作、手順読解、トラブルシュートの基礎体力を作る項目です。

オプション

  • -name パターン
    名前で検索します。シェル展開を避けるため通常は引用します。
    find . -name "*.log"
  • -type 種別
    fは通常ファイル、dはディレクトリなど、種類で絞り込みます。
    find . -type f
  • -mtime 日数
    更新時刻で絞り込みます。
    find . -mtime -1
  • -exec コマンド {} ;
    見つかった各対象へコマンドを実行します。破壊的処理は慎重に使います。
    find . -type f -exec ls -l {} ;
  • -print0
    区切りをNUL文字にして安全に後続処理へ渡します。
    find . -type f -print0 | xargs -0 ls -l

実行結果サンプル

  • find . -maxdepth 1 -type f
    ./a.txt
    ./b.txt
  • find /etc -maxdepth 1 -type f -name "*.conf"
    /etc/xxx.conf など

戻り値コード

  • 0 探索が正常に完了しました。
  • >0 権限不足、開始位置不正、式の誤りなどで失敗しました。

使用例

  • find . -name "*.log"
  • find . -type f -mtime -1
  • find /var/log -type f -size +10M
  • find . -type f -print0

よくあるエラー

  • find . -name *.logで意図しない結果になった
    原因: シェルが先にパターン展開してしまいました。
    対処: パターンは"*.log"のように引用します。
  • -exec rmを使って消し過ぎた
    原因: 対象確認なしで破壊処理をつなげたためです。
    対処: まず-printやlsで対象確認し、必要ならバックアップ後に実行します。

導入・互換性情報

POSIXで基本機能は定義されていますが、GNU findutilsには便利な拡張が多くあります。-print0、-delete、-printfなどは実装差に注意が必要です。

  • Debian GNU/Linux / 13 / GNU findutils 4.10.0 / Bash 5.2.37

注意点 / セキュリティリスク

検索結果へそのまま削除や変更処理をつなぐと危険です。まず-printで対象確認し、空白や改行を含む名前に備えて-print0とxargs -0の組み合わせも理解しておく必要があります。

FAQ

  • Q. locateとの違いは何ですか。
    A. findは実際のファイルシステムを走査し、locateは事前作成済み索引を検索します。findのほうが条件指定と正確性に優れます。
  • Q. 安全に後続コマンドへ渡すにはどうすればよいですか。
    A. 空白や改行を含む名前に備え、find -print0とxargs -0の組み合わせが定番です。

関連用語

  • wildcard
  • glob
  • ファイルシステム
  • inode
  • dentry
  • directory
  • root directory
  • atime
  • setuid
  • setgid
  • sticky bit
  • compliance
  • module
  • framework

参照リンク

関連記事