bash
ファイルの有無を判定する方法をよく忘れるので、整理してみることにしました。
書いたとしても、また忘れると思うのですが・・・。
bash
でファイルやディレクトリがあるかどうかを判定する時は、以下のようなif
文を使います。
この時の-f
の部分がいつも思い出せなくなります。
結論から言うと以下です。
オプション |
説明 |
-e |
パスの存在をチェックする |
-f |
ファイルの存在をチェックする |
-d |
ディレクトリの存在をチェックする |
確認してみる
以下のようなcheck.sh
というスクリプトを書いて、-e
、-f
、-d
をそれぞれ、ディレクトリとファイルに対して実行した場合にどうなるかを確認しました。
foo
というディレクトリとhoge.txt
というファイルを用意して、これの存在チェックをやっています。
スクリプトと対象のファイル・ディレクトリは同じ階層においておきます。
./check.sh
を実行すると以下のような結果になります。
-e
はディレクトリとファイルの両方を見つけられています。
-f
はファイルのみ、-d
はディレクトリのみ見つけられていることがわかりました。
まとめ
bash
でのファイルの存在チェック方法を再確認しました。
とりあえずファイルかディレクトリがあるかが知りたいときは、-e
を使えばよいことがわかりました。例えばロックファイルのようなものがあるか調べて処理を制御したいときなど。
設定ファイルを読み込みたいときなど、後の処理で探したファイルやディレクトリの中身がを使いたい場合は、-f
や-d
を使うのがよさそうです。
ファイルだと思って開いたらディレクトリだったということを減らせそうです。