findの正規表現(regextype)

findで複数の拡張子に対して検索… 例えば、*.javaと*.jsを探したい〜みたいなケース。

方法を検索してみるとor指定(-o)で繋げる方法が上位にずらっと並びますが、そんな事したいわけありません。正規表現が使えるってのに。
参考:google:find 複数 拡張子

で、-regexをつけて意気揚々と検索するわけですが

% find -regex ".*\.(java|js)"
(検索失敗)

ここでman find。(バージョンは4.5.9)

 -regextype type
     Changes  the  regular  expression syntax understood by -regex and -iregex tests which occur later on the command line.
     Currently-implemented types are emacs (this is the default), posix-awk, posix-basic, posix-egrep and posix-extended.


Emacsの式の正規表現なので、以下のようにいちいちエスケープが必要みたいです。げんなりですね。

% find -regex ".*\.\(java\|js\)"

あるいは、-regextypeを指定しておく。

% find -regextype posix-egrep -regex ".*\.(java|js)"

使う環境が決まっているならば、シェルの設定ファイルで-regextype指定したaliasを設定しておくのが、一番ストレスなく使えそうです。でも、設定してない環境をいじるときにいちいちイラッとしそうな気も多少。

#追記:続きの記事→GNU findの-regextype指定をどうにかうまく出来ないか | 賞味期限切れぷろぐらまー