by shigemk2

当面は技術的なことしか書かない

bash check multiple files exist

ファイルの存在チェックはこう書くじゃん。

if [ -e aaa.zip ]; then
  echo "hoge"
fi

でもこう書いたら too many arguments って怒られるんだよね。

if [ -e aaa* ]; then
  echo "hoge"
fi

まあ当然だよね。とどのつまりは展開されて if [ -e aaa.zip aaabbb.zip aaaccc.zip ] みたいな感じになっちゃうから。

で、これを回避するためには、ワイルドカードは使わないで、ファイル数をチェックしよう。 ここで、/dev/nullに標準エラー出力を放り込まないとファイルが存在しなかったらプログラムが止まるので注意。

if [ 0 -lt $(ls aaa* 2>/dev/null | wc -w) ]; then
  echo "hoge"
fi

unix.stackexchange.com