find -iregexオプションの使い方|大文字小文字を区別せずに正規表現でファイル検索する方法
生徒
「Linuxのfindコマンドで、ファイル名を検索するときに、大文字と小文字の違いを無視する方法ってありますか?」
先生
「それなら-iregexオプションを使えばできるよ。正規表現と組み合わせて、大文字と小文字の違いを気にせず検索できるんだ。」
生徒
「えっ?じゃあ、'File1.txt'も'file1.TXT'も両方見つかるってことですか?」
先生
「そのとおり!一緒に具体的な使い方を学んでいこう!」
1. findコマンドと正規表現検索の基本
Linuxでファイルを探すときに使うのがfindコマンドです。通常は-nameでファイル名を指定しますが、もっと柔軟に検索したいときは正規表現が便利です。
正規表現(せいきひょうげん)とは、「文字の並び方」にルールをつけて検索できる記号のようなものです。たとえば、「.txtで終わるファイル」といった条件も記述できます。
2. -regexとの違いと-iregexの特徴
-regexオプションは、ファイルのパス全体に対して、指定した正規表現が一致するファイルを検索します。
-iregexはその拡張で、大文字小文字を区別せずにマッチするファイルを検索することができます。
たとえば、Report.txtとreport.TXTが混在していても、-iregexなら一度に見つけられます。
3. 実際にfind -iregexを使ってみよう
まずは、テスト用のディレクトリとファイルを用意してみましょう。
mkdir testcase
cd testcase
touch FileA.txt filea.TXT Report.csv report.CSV
この中から「.txt」で終わるファイルを大文字小文字を区別せずに探すには、次のように書きます。
find . -iregex '.*\.txt'
./FileA.txt
./filea.TXT
このように、拡張子が小文字でも大文字でも同じようにヒットします。
4. 大文字と小文字を区別しない検索が役立つ場面
Linuxでは、ファイル名の大文字と小文字は完全に区別されます。そのため、同じ内容のファイル名に見えても、Document.txtとdocument.txtは別物として扱われます。
でも実際の現場では、手動で作成されたファイルなどで、大文字小文字のルールが統一されていないことも多いです。そんなとき、-iregexを使うと、間違いなく全ての対象ファイルを検索できます。
5. 拡張子がcsvのファイルをすべて探す例
たとえば、「.csv」や「.CSV」「.Csv」など、どんな書き方でも探し出したい場合は、以下のようにします。
find . -iregex '.*\.csv'
./Report.csv
./report.CSV
ポイント:
正規表現はファイルの「パス全体」に対してマッチするので、./なども含めた表現が必要です。
6. -nameや-inameとの違いを整理しよう
findには-name(完全一致)や-iname(大文字小文字を無視した一致)もありますが、-iregexはもっと柔軟なパターン指定ができるのが魅力です。
find . -iname "*.csv"
./Report.csv
./report.CSV
ただし-inameはワイルドカードだけなので、[0-9]や^、$といった正規表現特有の機能は使えません。
もっと細かく制御したいなら、やはり-iregexが強力です。
7. よく使う-iregexパターン例
.*\.txt:拡張子がtxt(大小文字問わず).*report.*\.csv:「report」を含み、拡張子がcsv\./[A-Z][a-z]+\.docx:先頭が大文字、続く小文字、拡張子がdocx
こうしたパターンを覚えておくと、実務でもファイル管理がとても楽になります。
8. Emacs正規表現に気をつけよう
Linuxのfindコマンドは、Emacs式正規表現を使います。PerlやGrepと少し違うルールのため、うまくマッチしないときはパス全体にマッチしているか注意しましょう。
たとえば、単に[a-z]+\.txtのように書くとマッチしないことがあります。\./を忘れずに書くのがコツです。