探す

INPUT · スライド

種類と大きさで絞る

01 / 08

名前だけでは絞りきれない

前のレッスンで、findファイルも入れ物も区別せずに見つけることが分かったね。

実際に探し物をするときは、こういう絞りかたをしたくなるよ。

  • ファイルだけほしい(入れ物は邪魔)
  • 入れ物の一覧だけほしい
  • 容量を食っている大きいものだけ見たい
  • 中身がないからっぽを片付けたい

find はこれ全部できるよ。条件を足していくだけだね。

02 / 08

`-type` で種類を選ぶ

-type に1文字を渡すと、その種類だけになるよ。

  • -type f … ファイル(f は file)
  • -type d … 入れ物(d は directory)

ほかにも l(リンク)などがあるけれど、いま覚えるのはこの2つで十分だよ。

find . -type f は「ここから下にあるファイルを全部」という意味。いちばんよく打つ形だよ。

~ $ find . -type d../log./log/furui./shashin./karappo

03 / 08

条件を並べると「かつ」

条件はいくつ並べてもいいよ。並べると「かつ」(両方を満たす)になるんだ。

```
find . -type f -name '*.log'
```

これは「ファイルであり、かつ名前が .log で終わるもの」。

順番は自由だけれど、読みやすさのために -type-name-size の順で書く人が多いよ。

04 / 08

`-size` で大きさで絞る

大きさで絞るのが -size だよ。数のうしろに単位を付けるんだ。

  • -size +1k … 1キロバイトより大きい
  • -size -1k … 1キロバイトより小さい
  • -size +2000c … 2000バイトより大きい(c はバイト)

+ が「より大きい」、- が「より小さい」。この2つは大きさ以外の条件(-mtime など)でも同じ意味で使うよ。

~ $ find . -type f -size +1k./log/access.log

05 / 08

からっぽを見つける

中身が 0 バイトのものを見つけるには -size 0 を使うよ。

-empty という書き方もある。こちらは中身のない入れ物にも当たるので、「使っていないものを探す」ときに便利だよ。

```
find . -type f -size 0 # からのファイル
find . -empty # からのファイルと、からの入れ物
```

06 / 08

見つけたものに命令する `-exec`

前のレッスンの最後で、見つけた道順を手で写して 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.log

07 / 08

「〜以外」は `!`

条件の前に ! を置くと、になるよ。

```
find . -type f ! -name '*.log'
```

「ファイルで、しかも .log ではないもの」だね。

! はシェルにとっても特別な記号なので、うまくいかないときは \! と書くか、-not と書いてもいいよ。

08 / 08

さあ、打ってみよう

この家にはファイルが6つ、入れ物が5つ(いまいる場所を含む)あるよ。

大きさもわざとばらしてある。log/access.log だけが 1キロバイトを超えていて、akihako.txt は 0 バイトだよ。

数が合うかどうかは | wc -l で数えて確かめよう。