01 / 08
名前だけでは絞りきれない
前のレッスンで、find はファイルも入れ物も区別せずに見つけることが分かったね。
実際に探し物をするときは、こういう絞りかたをしたくなるよ。
- ファイルだけほしい(入れ物は邪魔)
- 入れ物の一覧だけほしい
- 容量を食っている大きいものだけ見たい
- 中身がないからっぽを片付けたい
find はこれ全部できるよ。条件を足していくだけだね。
探す
INPUT · スライド
01 / 08
前のレッスンで、find はファイルも入れ物も区別せずに見つけることが分かったね。
実際に探し物をするときは、こういう絞りかたをしたくなるよ。
find はこれ全部できるよ。条件を足していくだけだね。
02 / 08
-type に1文字を渡すと、その種類だけになるよ。
-type f … ファイル(f は file)-type d … 入れ物(d は directory)ほかにも l(リンク)などがあるけれど、いま覚えるのはこの2つで十分だよ。
find . -type f は「ここから下にあるファイルを全部」という意味。いちばんよく打つ形だよ。
~ $ find . -type d../log./log/furui./shashin./karappo03 / 08
条件はいくつ並べてもいいよ。並べると「かつ」(両方を満たす)になるんだ。
```
find . -type f -name '*.log'
```
これは「ファイルであり、かつ名前が .log で終わるもの」。
順番は自由だけれど、読みやすさのために -type → -name → -size の順で書く人が多いよ。
04 / 08
大きさで絞るのが -size だよ。数のうしろに単位を付けるんだ。
-size +1k … 1キロバイトより大きい-size -1k … 1キロバイトより小さい-size +2000c … 2000バイトより大きい(c はバイト)+ が「より大きい」、- が「より小さい」。この2つは大きさ以外の条件(-mtime など)でも同じ意味で使うよ。
~ $ find . -type f -size +1k./log/access.log05 / 08
中身が 0 バイトのものを見つけるには -size 0 を使うよ。
-empty という書き方もある。こちらは中身のない入れ物にも当たるので、「使っていないものを探す」ときに便利だよ。
```
find . -type f -size 0 # からのファイル
find . -empty # からのファイルと、からの入れ物
```
06 / 08
前のレッスンの最後で、見つけた道順を手で写して cat に渡したよね。あれは面倒だった。
-exec を使うと、見つけたもの1つずつに命令を実行できるよ。
```
find . -name '*.log' -exec wc -l {} \;
```
{} が見つけたものの道順に置き換わる。おしまいの \; は「命令はここまで」という区切りだよ。\ を付けるのを忘れがちなので気をつけて。
~ $ find . -name '*.log' -exec wc -l {} \;80 ./log/access.log15 ./log/error.log2 ./log/furui/2025.log07 / 08
条件の前に ! を置くと、逆になるよ。
```
find . -type f ! -name '*.log'
```
「ファイルで、しかも .log ではないもの」だね。
! はシェルにとっても特別な記号なので、うまくいかないときは \! と書くか、-not と書いてもいいよ。
08 / 08
この家にはファイルが6つ、入れ物が5つ(いまいる場所を含む)あるよ。
大きさもわざとばらしてある。log/access.log だけが 1キロバイトを超えていて、akihako.txt は 0 バイトだよ。
数が合うかどうかは | wc -l で数えて確かめよう。