How to check if file or directory exists in Bash

Jul 31, 2023#bash

In Bash scripting, checking if a file or directory exists is a crucial task. Whether you are writing scripts for data processing, configuration management, or backup procedures, ensuring the presence of files and directories before performing any actions is essential to avoid errors and unexpected behaviors.

There are many file options in Bash that you can use to test various attributes of files, such as their existence, size, permissions, type, and so on. You can use these options with the [ or [[ commands, or with the test command in if..else statements.

  • -f file: True if the file exists and is a regular file.
  • -d file: True if the file exists and is a directory.
  • -s file: True if the file exists and has a size greater than zero.
  • -r file: True if the file exists and is readable.
  • -w file: True if the file exists and is writable.
  • -x file: True if the file exists and is executable.
  • -L file: True if the file exists and is a symbolic link.
  • -e file: True if the file exists (regardless of type).

Here are examples using -e, -f, -d options to check if file or directory exists:

  1. Using -e option to check if a file or directory exists. It returns true if the specified path exists, regardless of whether it is a regular file, a directory, a symbolic link, or any other type of file.
#!/bin/bash

if [ -e /path/to/your/file ]; then
  echo "File or directory exists."
else
  echo "File or directory does not exist."
fi
  1. Using -f option to check specifically for the existence of a regular file. It returns true only if the specified path exists and is a regular file. It will return false for directories, symbolic links, device files, and other special file types.
#!/bin/bash

if [ -f /path/to/your/file ]; then
  echo "Regular file exists."
else
  echo "Regular file does not exist."
fi
  1. Using -d option is useful when you specifically want to check for the existence of a directory and not any other type of file.
#!/bin/bash

if [ -d /path/to/your/directory ]; then
  echo "Directory exists."
else
  echo "Directory does not exist."
fi

By incorporating these checks, you can create more robust and efficient scripts that gracefully handle various scenarios in the Linux and Unix environments.