Bash でファイルが存在しないかどうかを確認する方法
Bashスクリプトでファイルが存在しないかどうかを確認するには、主に test
コマンドまたはその同義語である [
コマンドを使用します。これらのコマンドにオプションを付けて、ファイルの存在やタイプをチェックすることができます。
コード例
#!/bin/bash
# ファイルのパス
file_path="/path/to/your/file"
# ファイルが存在しない場合
if [ ! -e "$file_path" ]; then
echo "ファイル '$file_path' は存在しません。"
fi
説明
#!/bin/bash
:スクリプトの先頭に記述し、Bashインタープリタで実行することを指定します。file_path="/path/to/your/file"
:チェックするファイルのパスを変数に代入します。if [ ! -e "$file_path" ]; then ... fi
:if
:条件分岐の開始[ ! -e "$file_path" ]
:ファイルが存在しないかどうかをチェックします。!
:否定演算子-e
:ファイルが存在するかどうかをチェックするオプション"$file_path"
:チェックするファイルのパス(ダブルクォートで囲むことで、パスにスペースや特殊文字が含まれる場合でも正しく処理されます)
then
:条件が真の場合に実行するブロックの開始echo "ファイル '$file_path' は存在しません。"
:ファイルが存在しない場合に出力するメッセージfi
:条件分岐の終了
-f
:ファイルが通常のファイルであるかどうかをチェック-s
:ファイルが存在し、サイズが0より大きい場合に真
例
if [ ! -f "$file_path" ]; then
echo "ファイル '$file_path' は通常のファイルではありません。"
fi
備考
test
コマンドと[
コマンドは同義ですが、一般的に[
がよく使われます。- ダブル中括弧
[[
]]を使うこともできますが、
[` と比較して細かい違いがあります。 - ファイルの存在チェック以外にも、ファイルの権限、所有者、作成日時などの情報を取得することができます。
Bash でのファイル存在確認のコード例解説
コード例 1: ファイルが存在しない場合の処理
#!/bin/bash
file_path="/path/to/your/file"
if [ ! -e "$file_path" ]; then
echo "ファイル '$file_path' は存在しません。"
fi
#!/bin/bash
:このスクリプトが Bash スクリプトであることを宣言します。
コード例 2: ファイルの種類による処理
#!/bin/bash
file_path="/path/to/your/file"
if [ -f "$file_path" ]; then
echo "ファイル '$file_path' は通常のファイルです。"
elif [ -d "$file_path" ]; then
echo "ファイル '$file_path' はディレクトリです。"
else
echo "ファイル '$file_path' は存在しません、または特殊なファイルタイプです。"
fi
-f
:通常のファイルかどうかをチェックします。-d
:ディレクトリかどうかをチェックします。elif
:最初の条件が偽の場合に別の条件をチェックします。else
:すべての条件が偽の場合に実行されるブロックです。
#!/bin/bash
file_path="/path/to/your/file"
if [ -s "$file_path" ]; then
echo "ファイル '$file_path' は存在し、内容があります。"
else
echo "ファイル '$file_path' は存在しないか、空です。"
fi
コマンドの戻り値を利用する方法
- ファイルが存在しない場合、多くのコマンドはエラーコードを返します。このエラーコードをチェックすることで、ファイルの存在を確認できます。
if ! command_to_check_file "$file_path"; then
echo "ファイル '$file_path' は存在しません。"
fi
command_to_check_file
の部分には、ファイルの存在をチェックするコマンドを置き換えます。例えば、cat
,head
,tail
などを使用できます。これらのコマンドはファイルが存在しない場合、エラーコードを返します。!
演算子は、コマンドの戻り値が0以外(エラー)の場合に真となるように反転します。
stat コマンドを利用する方法
stat
コマンドはファイルの情報を取得するコマンドです。ファイルが存在しない場合、エラーが発生します。
if ! stat "$file_path" >/dev/null 2>&1; then
echo "ファイル '$file_path' は存在しません。"
fi
stat "$file_path"
:ファイルの情報を取得します。>/dev/null 2>&1
:標準出力と標準エラー出力を捨てます。!
演算子は、stat
コマンドが失敗した場合(ファイルが存在しない)に真となるように反転します。
find
コマンドはファイルやディレクトリを検索するコマンドです。ファイルが存在するかどうかの確認にも使用できますが、一般的には他の方法の方が効率的です。
if ! find "$file_path" -type f -print >/dev/null 2>&1; then
echo "ファイル '$file_path' は存在しません。"
fi
find "$file_path" -type f -print
:指定したパスに通常のファイルが存在するか検索します。!
演算子は、ファイルが見つからなかった場合に真となるように反転します。
- これらの代替方法は、通常は
test
コマンドや[
コマンドよりも複雑で効率的ではありません。 - 特定の状況下で、これらの方法が有用な場合もあります。例えば、ファイルに関する他の情報を同時に取得したい場合や、シェルスクリプトの他の部分で既にこれらのコマンドを使用している場合などです。
一般的には、test
コマンドや [
コマンドを使った方法が最もシンプルかつ効率的です。
bash file-io scripting