ファイルが存在するかどうかテストする

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)"