01 / 08
目で探すのが一番遅い
ファイルが増えてくると、ls して cd して ls して……という探し方が急に辛くなるよ。
入れ物が3段あって、それぞれに 10 個入っていたら、覗く場所は 100 か所以上。目で探すのは、数が増えると一番遅い方法なんだ。
この章では機械に探させるよ。名前で探すのが find、中身の文字で探すのが grep だよ。
探す
INPUT · スライド
01 / 08
ファイルが増えてくると、ls して cd して ls して……という探し方が急に辛くなるよ。
入れ物が3段あって、それぞれに 10 個入っていたら、覗く場所は 100 か所以上。目で探すのは、数が増えると一番遅い方法なんだ。
この章では機械に探させるよ。名前で探すのが find、中身の文字で探すのが grep だよ。
02 / 08
find の書き方はこうだよ。
```
find どこから -name なにを
```
「どこから」に .(いまここ)を書くのがいちばん多い。そこから下にある入れ物を全部潜って探してくれる。
ls と違って、深さは気にしなくていいよ。何段あっても勝手に降りていってくれる。
~ $ find . -name memo.txt./memo.txt./shigoto/memo.txt./shigoto/2026/haru/memo.txt03 / 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.md05 / 08
-name は大文字と小文字を区別するよ。Memo.txt を -name memo.txt では見つけられない。
区別せずに探したいときは -iname を使うよ。i は insensitive(区別しない)の頭文字だね。
人が付けたファイル名は大文字小文字がまちまちなので、迷ったら -iname のほうが安全だよ。
06 / 08
. の代わりに入れ物の名前を書けば、そこから下だけを探すよ。
find shigoto -name '*.txt' なら、shigoto の中だけ。関係ないところを探さないので速いし、結果も読みやすいよ。
探す範囲を狭めるのが、探し物のいちばんのコツだよ。
~ $ find shigoto -name '*.txt'shigoto/memo.txtshigoto/2026/keikaku.txtshigoto/2026/haru/memo.txt07 / 08
find は下まで全部潜るので、深いところまであると結果が多すぎることがあるよ。
-maxdepth 1 を付けると「いまいる場所だけ」、-maxdepth 2 なら「1段下まで」に区切れる。
-maxdepth は探す条件の前に書くという決まりがあるので、find . -maxdepth 1 -name ... の順で書くよ。
~ $ find . -maxdepth 1 -name '*.txt'./memo.txt08 / 08
この家には memo.txt という名前のファイルが3つ、別の深さに置いてあるよ。ls では一度に見えない形にしてある。
find なら1行で全部見つかる。順番は環境によって変わることがあるので、どんな順で出ても正解だよ。