kakakakakku blog

Weekly Tech Blog: Keep on Learning!

Bash で複数のファイルやディレクトリの存在確認をする

シンプルなことだけど,気になったのでまとめておく.やっぱり sh は苦労するw

単一のファイルもしくはディレクトリの存在確認をする

test コマンドの -e オプションで,ファイルもしくはディレクトリの存在確認ができる.以下の例では file_a にしてるけど,ここをディレクトリ名に変えれば良い.

#!/bin/sh

if [ -e /hoge/file_a ]; then
  echo 'FOUND'
else
  echo 'FOUND'
fi

複数のファイルもしくはディレクトリの存在確認をする

ここで上と同じような構文でアスタリスク表記を使おうとすると,こんなエラーが出る.

接尾辞をアスタリスク表記にした場合

#!/bin/sh

if [ -e /hoge/file_* ]; then
  echo 'FOUND'
else
  echo 'NOT FOUND'
fi
binary operator expected

ディレクトリ配下をアスタリスク表記にした場合

#!/bin/sh

if [ -e /hoge/* ]; then
  echo 'FOUND'
else
  echo 'NOT FOUND'
fi
too many arguments

-e は使わず ls で代用する.

こうすると期待通りに動作する.まぁ書き方は他にもいろいろあると思うけども.

#!/bin/sh

if [ "$(ls /hoge/file_*)" != '' ]; then
  echo 'FOUND'
else
  echo 'NOT FOUND'
fi
#!/bin/sh

if [ "$(ls /hoge/*)" != '' ]; then
  echo 'FOUND'
else
  echo 'NOT FOUND'
fi