グロブで特定ファイルを除外

特定のファイルだけを除いた他のファイルすべてに対して処理をしたいときの指定方法をメモ

まずオプション設定
.zshrcなどに書いておくのがよい

set_opt extended_glob

これで^や~がグロブとして使える
具体的には以下のような感じ

# .cではないファイル
$ ls ^*.c

# hoge.c以外の.cファイル
$ ls *.c~hoge.c

^が反転で~が除外
~は引き算みたいに見えるので覚えやすい
参考ページ:
zsh のファイル名生成で除外パターンを指定する - Qiita

一つ注意点
これを設定すると^が特殊な文字として認識されるためそれを使うコマンドでうまくいかない事態が起こる。具体的に言うとgit checkout HEAD^とか
この場合、バックスラッシュでエスケープすればよい。この例の場合なら~を使うとか。
参考ページ:
zshのEXTENDED_GLOBオプションを有効にしてるとgitでHEAD^指定が失敗する - 皮肉な日々と心意気(2010-09-15)