No.020ファイルとフォルダ

find

ファインド・ファイル検索

知識レベル 基礎注意一般ユーザーで使える

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

答えよく使う形

  1. 現在ディレクトリ直下の通常ファイルだけを表示します
  2. 拡張子条件付きの基本検索です
  3. 名前で検索します

注意検索結果へそのまま削除や変更処理をつなぐと危険です。

visitor@goodly: ~

$ find . -maxdepth 1 -type f

./a.txt
./b.txt

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

/etc/xxx.conf など

$ find . -name "*.log"

覚える順番の中で30 コマンド・18 駅め / 30LPIC-1・8 駅め / 106

どんなコマンド?

こんなときに

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

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

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

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

書き方とオプション

組み立ててみるオプションを押すと、下の1行に足されます。もう一度押すと外れます。

$ find

使用例と実行結果

行を押すとコピーできます。

./a.txt
./b.txt
現在ディレクトリ直下の通常ファイルだけを表示します。
/etc/xxx.conf など
拡張子条件付きの基本検索です。

まず安全に試す

3分ミッション

手を動かすと覚えやすくなります。できたものに印を付けてください(この端末に残ります)。

0 / 2

つまずいたとき

find . -name *.logで意図しない結果になった

原因シェルが先にパターン展開してしまいました。

こうするパターンは"*.log"のように引用します。

-exec rmを使って消し過ぎた

原因対象確認なしで破壊処理をつなげたためです。

こうするまず-printやlsで対象確認し、必要ならバックアップ後に実行します。

終わったときの数(戻り値)

$ echo $?

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

気をつけることと入れ方

気をつけること

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

たいていの Linux に最初から入っています(findutils)。

環境による違い

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

確かめた環境Debian GNU/Linux / 13 / GNU findutils 4.10.0 / Bash 5.2.372026-04-09 に確認

よくある質問

locateとの違いは何ですか。

findは実際のファイルシステムを走査し、locateは事前作成済み索引を検索します。findのほうが条件指定と正確性に優れます。

安全に後続コマンドへ渡すにはどうすればよいですか。

空白や改行を含む名前に備え、find -print0とxargs -0の組み合わせが定番です。

資格試験では

  • LinuC レベル1大事1.02 ファイル・ディレクトリの操作と管理
  • LPIC-1大事104.7 システムファイルの検索と正しい配置
  • 共通基礎大事Linuxコマンド基礎

find を最後まで読みました。

Linux コマンド辞典に戻る33 / 144

Goodly のメニュー