DebugPointer
Published on

How to check if a directory exist in a Bash Script?

How to check if a directory exist in a Bash Script?

A directory consists of files or sub-directories. While programming or writing a Bash script, you'll often come across a situation where you have to check if a directory exists in a certain path. Depending on the existence of a directory, you usually end up doing a certain logic or operation.

So, let's see how we can check if the directory exists in a path or not.

Check if Directory exist in Bash Script

Checking if a directory exist or not can be easily done by using if command. if performs a conditional check on the command that goes inside the brackets [ ].

if [ -d "$DIRECTORY_PATH" ]; then
  # If the $DIRECTORY_PATH exist, code inside the block will get executed
fi

Check if Directory does not exist in Bash

Here we are checking the error condition or the negative condition if the directory does not exist.

if [ ! -d "$DIRECTORY_PATH" ]; then
  # If the $DIRECTORY_PATH does not exist, code inside the block will get executed
fi

Are you looking for the scenario if a file exist or not in bash scripts?

Note that a the code inside the if block will still get executed if the folder was a symbolic link.

Also Note that, the "$DIRECTORY_PATH" is enclosed with double quotes. This is to handle cases where the directory name can have spaces and special characters(wildcard characters).

Let's say you had created a symbolic link of a folder.

ln -s "$DIRECTORY_PATH" "$SYMLINK_PATH"

Now if we check if the symbolic link, you will get an error rmdir: failed to remove 'symlink': Not a directory

if [ -d "$SYMLINK_PATH" ]; then
  rmdir "$SYMLINK_PATH"
fi

So, to treat this edge case, we will have to handle symlink's condition as shown below.

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

The above code is an ideal way to check if a path is a directory or not.