No.020ファイルとフォルダ
find
ファインド・ファイル検索
名前、種類、時刻、サイズ、権限などの条件でファイルを検索します。検索だけでなく、見つかった対象へ処理をつなげられるのが強みです。
答えよく使う形
注意検索結果へそのまま削除や変更処理をつなぐと危険です。
$ find . -maxdepth 1 -type f
./a.txt ./b.txt
$ find /etc -maxdepth 1 -type f -name "*.conf"
/etc/xxx.conf など
$ find . -name "*.log"
練習用の部屋です。何を打っても本物は変わりません。本物の Linux で続ける →
覚える順番の中で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