Globパターンにマッチするファイルがあるかテストする
ファイルが存在するかどうかテストする
testコマンドの-eオプションで引数に渡したファイル名のファイルが存在するかをテストできる。
test -e filename
このときGlobパターンを渡すことはできず、test -e filename*とすると、先にGlobパターンが展開されるため、
| マッチするファイルの数 | 結果 |
|---|---|
| 0 | 失敗: no matches found |
| 1 | 成功 |
| >=2 | 失敗: too many arguments |
となる。test -e "filename*"とすると、filename*という名前のファイルが存在するかをテストするためGlobパターンとして認識されない。
Bashならcompgenコマンドが使用できる
Bashならcompgenコマンドが使用できる。コマンド補完しようとしたときに最初にヒットするものを返すコマンドで-GオプションとGlobパターンを渡すとGlobパターンに最初にマッチするファイルを返す。
compgen -G "filename*" > /dev/null
シェルを問わないならfindコマンドが使用できる
findコマンドでも同様のことが行える。-nameオプションはGlobパターンを渡すことができ、-quitオプションは1つでも見つかったときに終了するため無駄に探索しなくて済む。
test -n "$(find . -maxdepth 1 -name 'filename*' -print -quit)"