シェルでファイルの存在確認をする方法

シェルでファイルの存在確認をする方法

シェルスクリプトでファイルの存在を確認する方法はいくつかありますが、一般的には if 文と [ ] を使って条件を確認します。
以下に、基本的なファイル存在確認の方法とその使い方を説明します。

基本的なファイル存在確認

ファイルが存在するかを確認する
  • e オプションを使うと、指定したファイルが存在するかどうかを確認できます。
if [ -e "ファイル名" ]; then
  echo "ファイルが存在します。"
else
  echo "ファイルが存在しません。"
fi

上記のスクリプトでは、[ -e "ファイル名" ] によって、指定したファイルが存在するかを確認しています。
ファイルが存在する場合は、then 以降のコマンドが実行され、存在しない場合は else 以降のコマンドが実行されます。

ファイルが通常のファイルかを確認する

ファイルが存在し、かつ通常のファイルであるかを確認する場合は、-f オプションを使います。

if [ -f "ファイル名" ]; then
  echo "通常のファイルが存在します。"
else
  echo "通常のファイルが存在しません。"
fi
ディレクトリが存在するかを確認する

ディレクトリの存在を確認するには、-d オプションを使用します。

if [ -d "ディレクトリ名" ]; then
  echo "ディレクトリが存在します。"
else
  echo "ディレクトリが存在しません。"
fi

ファイルのパーミッションを確認する

シェルスクリプトでは、ファイルの存在だけでなく、そのパーミッション(アクセス権限)を確認することもできます。
以下にいくつかの例を示します。

読み取り可能かを確認する
  • r オプションを使用して、ファイルが読み取り可能かどうかを確認します。
if [ -r "ファイル名" ]; then
  echo "ファイルは読み取り可能です。"
else
  echo "ファイルは読み取りできません。"
fi
書き込み可能かを確認する
  • w オプションを使用して、ファイルが書き込み可能かどうかを確認します。
if [ -w "ファイル名" ]; then
  echo "ファイルは書き込み可能です。"
else
  echo "ファイルは書き込みできません。"
fi
実行可能かを確認する
  • x オプションを使用して、ファイルが実行可能かどうかを確認します。
if [ -x "ファイル名" ]; then
  echo "ファイルは実行可能です。"
else
  echo "ファイルは実行できません。"
fi

複数条件の確認

複数の条件を組み合わせて確認することも可能です。
たとえば、ファイルが存在し、かつ読み取り可能であるかを確認する場合は、以下のように書きます。

if [ -e "ファイル名" ] && [ -r "ファイル名" ]; then
  echo "ファイルは存在し、読み取り可能です。"
else
  echo "ファイルが存在しないか、または読み取りできません。"
fi

スクリプトの応用例

以下は、ファイルが存在しない場合に新しいファイルを作成し、存在する場合は内容を表示する簡単なスクリプトの例です。

ファイル名="test.txt"

if [ -e "$ファイル名" ]; then
  echo "$ファイル名 の内容:"
  cat "$ファイル名"
else
  echo "$ファイル名 が存在しません。新しいファイルを作成します。"
  echo "これは新しいファイルです。" > "$ファイル名"
fi

このスクリプトでは、まずファイルの存在を確認し、存在する場合は cat コマンドで内容を表示します。
存在しない場合は、echo コマンドとリダイレクトを使って新しいファイルを作成します。

これらの方法を使って、シェルスクリプト内で柔軟にファイルの存在や状態を確認できます。
シンプルなスクリプトから高度な処理まで、多様なシナリオで利用できるでしょう。