探す

INPUT · スライド

名前で探し出す

01 / 08

目で探すのが一番遅い

ファイルが増えてくると、ls して cd して ls して……という探し方が急に辛くなるよ。

入れ物が3段あって、それぞれに 10 個入っていたら、覗く場所は 100 か所以上。目で探すのは、数が増えると一番遅い方法なんだ。

この章では機械に探させるよ。名前で探すのが find、中身の文字で探すのが grep だよ。

02 / 08

find — 下まで潜って探す

find の書き方はこうだよ。

```
find どこから -name なにを
```

「どこから」に .(いまここ)を書くのがいちばん多い。そこから下にある入れ物を全部潜って探してくれる。

ls と違って、深さは気にしなくていいよ。何段あっても勝手に降りていってくれる。

~ $ find . -name memo.txt./memo.txt./shigoto/memo.txt./shigoto/2026/haru/memo.txt

03 / 08

見つけたものは「道順」で出る

出てくるのは名前ではなく、そこまでの道順(パス)だよ。

./shigoto/2026/haru/memo.txt と出れば、それがどこにあるかまで分かる。だから見つけたらそのまま cat に渡せるんだ。

.(ドット)から始まっているのは、「探し始めた場所から見た道順」という意味。find /home/manabiya -name ... と書けば /home/... から始まる形で出るよ。

04 / 08

`*` で「なにか」を表す

名前の一部しか覚えていないときは * を使うよ。「なんでもいい文字の並び」という意味だね。

  • *.txt.txt で終わるもの
  • memo*memo で始まるもの
  • *memo* … どこかに memo を含むもの

注意がひとつ。クォートで囲む必要があるんだ。囲まないと、find に届く前にシェルが * を広げてしまうからだよ。

~ $ find . -name '*.md'./shigoto/2026/haru/houkoku.md./shashin/umi/aki.md

05 / 08

大文字小文字を区別しない `-iname`

-name は大文字と小文字を区別するよ。Memo.txt-name memo.txt では見つけられない。

区別せずに探したいときは -iname を使うよ。iinsensitive(区別しない)の頭文字だね。

人が付けたファイル名は大文字小文字がまちまちなので、迷ったら -iname のほうが安全だよ。

06 / 08

場所を指定して探す

. の代わりに入れ物の名前を書けば、そこから下だけを探すよ。

find shigoto -name '*.txt' なら、shigoto の中だけ。関係ないところを探さないので速いし、結果も読みやすいよ。

探す範囲を狭めるのが、探し物のいちばんのコツだよ。

~ $ find shigoto -name '*.txt'shigoto/memo.txtshigoto/2026/keikaku.txtshigoto/2026/haru/memo.txt

07 / 08

深さを区切る `-maxdepth`

find は下まで全部潜るので、深いところまであると結果が多すぎることがあるよ。

-maxdepth 1 を付けると「いまいる場所だけ」、-maxdepth 2 なら「1段下まで」に区切れる。

-maxdepth探す条件の前に書くという決まりがあるので、find . -maxdepth 1 -name ... の順で書くよ。

~ $ find . -maxdepth 1 -name '*.txt'./memo.txt

08 / 08

さあ、打ってみよう

この家には memo.txt という名前のファイルが3つ、別の深さに置いてあるよ。ls では一度に見えない形にしてある。

find なら1行で全部見つかる。順番は環境によって変わることがあるので、どんな順で出ても正解だよ。