シェルスクリプトでファイルの存在を確認する方法 | Linux Fan

シェルスクリプトでファイルの存在を確認する方法

2017年9月29日

シェルスクリプトで通常ファイルが存在した場合のみコマンドを実行するには、以下のように書きます。

if [ -f ~/path/to/file ]; then
  # 実行する処理、以下は例
  ls -l ~/path/to/file
fi

通常ファイル以外の広義のファイル(ディレクトリやソケットなど)の場合は、「-f」で調べても「偽」となり、コマンドが実行されません。
ファイルタイプにかかわらず、存在すればコマンド実行する場合は「-e」を用います。

if [ -e ~/path/to/file ]; then
  # 実行する処理、以下は例
  ls -l ~/path/to/file
fi

存在しない場合にコマンドを実行するには、以下のように書きます。

if [ ! -e ~/path/to/file ]; then
  # 実行する処理、以下は例
  touch ~/path/to/file
fi

以下は、Bashのマニュアルページに記載されている、ファイル存在に関する条件式です。これらを組み合わせることで、ファイルの存在、非存在、種類に応じて処理を変えることができます。

-a file
file が存在すれば真となります。

-b file
file が存在し、かつブロック特殊ファイルならば真となります。

-c file
file が存在し、かつキャラクター特殊ファイルならば真となります。

-d file
file が存在し、かつディレクトリならば真となります。

-e file
file が存在すれば真となります。

-f file
file が存在し、かつ通常ファイルならば真となります。

-g file
file が存在し、かつ set-group-id されていれば真となります。

-h file
file が存在し、かつシンボリックリンクならば真となります。

-k file
file が存在し、かつ ``sticky'' ビットが設定されていれば真となります。

-p file
file が存在し、かつ名前付きパイプ (FIFO) ならば真となります。

-r file
file が存在し、かつ読み込み可能ならば真となります。

-s file
file が存在し、かつそのサイズが 0 より大きければ真となります。

-u file
file が存在し、 かつ set-user-id ビットが設定されていれば真となります。

-w file
file が存在し、かつ書き込み可能ならば真となります。

-x file
file が存在し、かつ実行可能ならば真となります。

-G file
file が存在し、かつ (実行中のシェルの) 実効グループ ID に所有されていれば真となります。

-L file
file が存在し、かつシンボリックリンクならば真となります。

-N file
file が存在し、 かつ前回読み込まれた以降に修正されていれば真となります。

-O file
file が存在し、かつ (実行中のシェルの) 実効ユーザ ID に所有されていれば真となります。

-S file
file が存在し、かつソケットならば真となります。