1. ホーム
  2. bash

[解決済み] Bashシェルスクリプトでディレクトリが存在するかどうかを確認するにはどうすればよいですか?

2022-03-15 18:13:26

質問

Bashシェルスクリプトで、ディレクトリが存在するかどうかを確認するために使用できるコマンドは何ですか?

どのように解決するのですか?

シェルスクリプトでディレクトリが存在するかどうかを確認するには、次のようにします。

if [ -d "$DIRECTORY" ]; then
  # Control will enter here if $DIRECTORY exists.
fi

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

if [ ! -d "$DIRECTORY" ]; then
  # Control will enter here if $DIRECTORY doesn't 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が説明しています。 別の回答で .

変数にスペースやその他の特殊な文字が含まれていると、おそらくスクリプトが失敗する原因になります。