2014-07-14

find コマンドでファイル名正規表現検索

find コマンドの検索では専ら -name オプションを使う。これだと細かいファイル名指定が出来ない。先日、正規表現が使えると教えてもらったのでメモ。

画像検索を例に...

JEPG, PNG 画像を検索してみる。-name オプションを使う場合はこんな感じ。二回に検索を分ける。

$ find . -name '*.jpg'
$ find . -name '*.png'

正規表現を使う

正規表現を使う場合、検索開始パスの前に -E オプションを付ける。検索には -name の代わりに -regex を使う。拡張子 .jpg と .png なファイルを検索する場合はこんな感じ。

$ find -E . -regex '^.+\.(jpg|png)$'

大文字・小文字を無視したい

Windows 系のソフトを使うと、ファイル名が大文字だったりする。アルファベットの大文字・小文字を無視させて検索する場合は -regex ではなく -iregex を使う:

$ find -E . -iregex '^.+\.(jpg|png)$'

沢山の画像フォーマットに対応

JPEG の拡張子は .jpg の他に .jpeg も使われる。画像ファイルには GIF もまだ健在。ウェブをやっていると ico ファイルも扱うか? 最近は .svg も使われるようになってきた。全部に対応するよう、正規表現を書いてみる。

$ find -E . -iregex '^.+\.(jpe?g|png|gif|ico|svg)$'

ここまでくると、随分、実用的になったかな。

Man は Mac OS X に付いてくるものを参考にした。BSD 系の find みたいね。

2 comments:

  1. \の後ろの.(dot)が手違いなのか消えてるようです。

    ReplyDelete
    Replies
    1. eban さん、ご指摘ありがとうございます。修正しました。
      返事が遅くなり申し訳ないです。

      Delete