2.3.1 ベース名のパターン
- テスト: -name pattern
- テスト: -iname pattern
ファイル名のベース部分、つまりパスから先頭のディレクトリ部分を取り除いたものが、シェルパターンpatternに一致すると真になります。「-iname」では大文字と小文字を区別しません。1 ディレクトリツリー全体を対象から外すには、「-prune」を使います(ディレクトリを参照)。たとえば、/usr/local/docにあるTexinfoのソースファイルを検索するには、次のようにします。
find /usr/local/doc -name '*.texi'
シェルによる展開を防ぐため、ワイルドカードは引用符で囲む必要があります。
findutilsのバージョン4.2.2(2004年)以降、「-name」と「-iname」のパターンは、先頭が「.」のファイル名にも一致します。たとえば、コマンド「find /tmp -name \*bar」はファイル/tmp/.foobarに一致します。パターン内の波括弧「{}」は特別なものとして扱いません。つまり、
find . -name 'foo{1,2}'はfoo{1,2}という名前のファイルに一致し、foo1やfoo2というファイルには一致しません。先頭のディレクトリ部分を取り除くため、「-name」で一致を調べるファイル名にはスラッシュが含まれません。ただし、ルートディレクトリそのもの「/」は例外です。そのため、「-name /」はルートディレクトリに一致しますが、「-name a/b」が何かに一致することはありません。おそらく、代わりに「-path a/b」を使う必要があります。
「-iname」オプションがPOSIXに初めて登場したのはIssue 8(IEEE Std 1003.1-2024)ですが、GNU
findではバージョン3.8(1993年)から対応しています。
(1)
大文字と小文字を区別しない照合が必要なため、GNUのfnmatch実装を常に使います。CライブラリにGNUの実装が含まれていればそれを使い、含まれていなければgnulibの実装を使います。