60(文字)x 44(行) x 2 zsh の ワイルドカード zsh では、他の shell と同じようなワイルドカードはもちろん使 えるが、extendedglob を setopt しておくことでそれよりももっ と強力なものが利用できる。この場合、* や ?、[ 、] の他に^ と # もメタキャラクタとして扱われる。 ただし、パターンの先頭および / の後の . は特別に扱われてお り、.* としても . と .. にはマッチしない。従って、.* としても . や .. にマッチしないので便利なことが多い。 zsh のメタキャラクタは次の通りである。 * 任意の文字列にマッチする (空文字列も含む) ? 任意の文字にマッチする [ ... ] 囲った文字のどれかにマッチする [^ ... ] 囲った文字以外の文字にマッチする x から y までの範囲の数字にマッチする x を省略すると、y 以下の数字にマッチする y を省略すると、x 以上の数字にマッチする <-> か <> は任意の数字にマッチする ^x パターン x 以外にマッチする x|y x か y にマッチする これは ( ) でグループ化しないといけない x# 0 以上のパターン x にマッチする x## 1 以上のパターン x にマッチする これらは括弧を使うことでグループ化できる。/ は ^ より優先順 位が高いので、^foo/bar は、foo 以外のディレクトリにある bar というファイルにマッチすることになる。 (*/)# は **/ としてもよい。よって、カレントディレクトリ以 下にある foo というファイルを探す時には、find を使わなくても、 **/foo とすればよい。このようにすると、カレントディレクトリ から再帰的にfoo というファイル名を持つファイルを探してくれる。 またパターンから除外するために、(J~(B を使って指定できる。つま り、pat1(J~(Bpat2 はパターン pat1 にはマッチして、パターン pat2 にはマッチしないようなファイル名にマッチする。 さらに、パターンに次の文字などを括弧で括ったものを付け加えると、 パターンの制限ができる。 / ディレクトリ . 普通のファイル @ シンボリックリンク = ソケット p 名前つきパイプ (FIFO) * 実行可能な普通のファイル (0100) % デバイスファイル (キャラクタ型、ブロック型は区別しない) r 読み出し可能なファイル (0400) w 書き込み可能なファイル (0200) x 実行可能ファイル (0100) R 全員が読み出せるファイル (0004) W 全員が書き込めるファイル (0002) X 全員が実行できるファイル (0001) s setuid されたファイル (04000) S setgid されたファイル (02000) ddev デバイス dev にあるファイル lct リンクカウントが ct のファイル U 実効ユーザがオーナーのファイル G 実行グループがオーナーのファイル unum ユーザid が num のユーザがオーナーのファイル gnum グループid が num のグループがオーナーのファイル a[-|+]n アクセス時間が、(-) n 日以内、(+) n 日以前、 (-,+ をつけない) n 日前のファイル m[-|+]n 修正時間が、(-) n 日以内、(+) n 日以前、 (-,+ をつけない) n 日前のファイル c[-|+]n inode の変更が、(-) n 日以内、(+) n 日以前、 (-,+ をつけない) n 日前のファイル L[+|-]n ファイルサイズが、(-) n 未満、 (+) n より大きい (-,+ をつけない) n bytes のファイル ^ 続く修飾子を否定する。 M 現在のパターンに対してMARKDIRS option をつける N 現在のパターンに対してNULLGLOB option をつける D 現在のパターンに対してGLOBDOTS option をつける 例えば、/dev/*(%W) は、/dev にある誰でも書き込めるデバイスファ イルにマッチする。また、 **/*.*(J~(B(lex|parse).[ch](rwl1^@) は、カレントディレクトリ以下のファイルの中で . を含んだファ イル名を持つ読み書き可能でリンクカウントが 1 で、シンボリッ クリンクでないファイルにマッチする。ただし、lex.c, lex.h, parse.c, parse.h は除外する。