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 みたいね。
\の後ろの.(dot)が手違いなのか消えてるようです。
ReplyDeleteeban さん、ご指摘ありがとうございます。修正しました。
Delete返事が遅くなり申し訳ないです。