How to Check if File or Directory Exists in Bash Shell

Scripting in Bash is fun. In this post, I would talk about how to check if a file or director exits. Lets start with the file first

ls credits.csv
credits.csv

I have the above file credits.csv. Lets check if the credits.csv file using Bash

How to check if file exists in bash

if [[ -f "credits.csv" ]]; then
    echo "file exists"
fi
file exists

Lets go over the above if loop. Bash is very space sensitive. Check out the space between brackets. Lets try the above command by removing the spaces.

if [[-f "credits.csv" ]]; then
    echo "file exists"
fi
bash: [[-f: command not found

We got the error that [[-f: command not found. so make sure you fix the spaces.

We can also use -e switch to check if file exists. -e can be used for both file and directory

if [[ -e "credits.csv" ]]; then
    echo "file exists"
fi
file exists

How to check if file not exists in bash. We will have to use the negate argument. Lets try that.

if [[ ! -e "credits.csv" ]]; then
    echo "file doesnt exist"
else
    echo "file exists"
fi
file exists

How to Check if file is symbolic link to a file in bash

Lets create a symbolic link to our credits.csv.

ln -s credits.csv creditslink
ls -lrt creditslink
lrwxrwxrwx 1 root root 11 Nov 30 00:19 creditslink -> credits.csv

Ok we have now the symbolic link in place. Lets check this link using bash script.

if [[ -L "creditslink" && -f "creditslink" ]]
then
    echo "creditslink is a symlink to a file"
fi
creditslink is a symlink to a file

As you see above, we combined both the switches -L for symbolic link and -f for checking the file using the && operator

How to check if directory exists in bash

Lets check if home directory exists. The command is pretty much same except that instead of -f use -d switch

if [[  -d "/home" ]]; then
    echo "directory home exists"
else
    echo "directory home doesn't exist"
fi
directory home exists

We can also use -e switch to check if directory exists

if [[  -e "/home" ]]; then
    echo "directory home exists"
else
    echo "directory home doesn't exist"
fi
directory home exists

How to Check if file is symbolic link to a directory in bash

Lets create a symbolic link to directory home.

pwd
/home/projects/notebooks
ln -s  /home homelink
ls -lrt homelink
lrwxrwxrwx 1 root root 5 Nov 30 00:15 homelink -> /home

Ok we have created the symbolic link now. Now lets check if it is a symbolic link to a directory.

if [[ -L "homelink" && -d "homelink" ]]
then
    echo "homelink is a symlink to a directory"
fi
homelink is a symlink to a directory

Thats it for now. Hope the above commands, you would find helpful.