Bash シェル スクリプトでディレクトリが存在するかどうかを確認するにはどうすればよいですか? 質問する

Bash シェル スクリプトでディレクトリが存在するかどうかを確認するにはどうすればよいですか? 質問する

Bash シェル スクリプト内でディレクトリが存在するかどうかを確認するコマンドは何ですか?

ベストアンサー1

ディレクトリが存在するかどうかを確認するには:

if [ -d "$DIRECTORY" ]; then
  echo "$DIRECTORY does exist."
fi

ディレクトリが存在しないかどうかを確認するには:

if [ ! -d "$DIRECTORY" ]; then
  echo "$DIRECTORY does not exist."
fi

しかし、ジョン・エリクソン指摘されているように、ディレクトリへのシンボリック リンクもこのチェックを通過することを考慮しないと、後続のコマンドが意図したとおりに動作しない可能性があります。たとえば、これを実行します。

ln -s "$ACTUAL_DIR" "$SYMLINK"
if [ -d "$SYMLINK" ]; then 
  rmdir "$SYMLINK" 
fi

次のエラー メッセージが生成されます:

rmdir: failed to remove `symlink': Not a directory

したがって、後続のコマンドがディレクトリを期待する場合、シンボリック リンクを異なる方法で処理する必要がある可能性があります。

if [ -d "$LINK_OR_DIR" ]; then 
  if [ -L "$LINK_OR_DIR" ]; then
    # It is a symlink!
    # Symbolic link specific commands go here.
    rm "$LINK_OR_DIR"
  else
    # It's a directory!
    # Directory command goes here.
    rmdir "$LINK_OR_DIR"
  fi
fi

変数を囲む二重引用符に特に注意してください。その理由は8jeanが説明しています。別の回答では

変数にスペースやその他の異常な文字が含まれていると、スクリプトが失敗する可能性があります。

おすすめ記事