LoginSignup
38
27

More than 5 years have passed since last update.

ファイルの存在確認でワイルドカードを使う

Last updated at Posted at 2016-09-26

はじめに

単一ファイルの存在確認であれば、[ -e file ]で確認が出来ますが、この構文ではワイルドカードが使えず、ほかの方法を模索したのでメモ。

lsのエラーをつかむ方法

ググったときによく出てきたのは、下記のようにls叩いてエラーを拾う方法。一致するものが無い場合にエラー終了(終了ステータス2)することを利用して、判定をしています。

ls /hoge/*.txt >/dev/null 2>&1
if [ $? -ne 0 ]; then
  # 存在しない場合
else
  # 存在する場合
fi

その他のエラーと分離したい

上の方法で困るのは、エラー終了のときに、まるっとすべて存在しない扱いになってしまうこと。「/bin/ls削除してシェル叩きまっせ」とかいう変態テストでNGになってしまったため、急遽別の方法を模索することに。

そこで採用したのが下記の方法。find-nameオプションを使用してあげれば、ファイルが存在しないときには正常終了・標準出力なしになるため、エラーと分離が出来ます。(ただし、捜索先のディレクトリは存在していないとエラーになります。これは[ -e dir ]とかで確認できるし問題ないかな)

RES=`find /hoge -maxdepth 1 -name *.txt 2>/dev/null`
if [ $? -ne 0 ]; then
  # 予期せぬエラーの場合
elif [ -z "$RES" ]; then
  # 存在しない場合
else
  # 存在する場合
fi
38
27
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
38
27