How To Check If File or Directory Exists in Bash

August 30, 2019

Introduction

There are several functions in Linux that only work if a particular file or directory exists. Bash is a shell that interprets commands. You can use a

In this guide, learn how to use a bash command to check if a file or directory exists.

Introductory image to check file or directory in Bash.

Prerequisites

  • A Linux operating system
  • Access to a terminal window / command line (Ctrl-Alt-T / Ctrl-Alt-F2)

Note: You may encounter the term bash script. This is a sequence of several commands to the shell. A script can be saved as a file and is often used to automate multiple system commands into a single action.

How to Check if a File Exists

To test for the file /tmp/test.log, enter the following from the command line:

test –f /tmp/test.txt

The first line executes the test to see if the file exists. The second command, echo, displays the results 0 meaning that the file exists, 1 means no file was found.

echo $?

In our example, the result was 1.

The result 1 indicates that no file was found ehan using echo command.

Now try creating a file, then testing for it:

touch /tmp/test.txt
test –f /tmp/test.txt
echo $?

As we have created the file beforehand, the result now is 0:

The result 0 indicates that the file is found.

You can also use square brackets instead of the test command:

[ –f /tmp/test.txt ]
echo $?

How to Check if a Directory Exists

To check if a directory exists, switch out the –f option on the test command for –d (for directory):

test –d /tmp/test
echo $?

Create that directory, and rerun the test:

touch /tmp/test
test –d /tmp/test
echo $?

This command works the same as it does for files, so using brackets instead of the test command works here also.

Note: If you are searching for a file or directory because you need to delete it, refer to our guide on removing files and directories with Linux command line.

How to Check if a File Does not Exist

Typically, testing for a file returns 0 (true) if the file exists, and 1 (false) if the file does not exist. For some operations, you may want to reverse the logic. It is helpful if you write a script to create a particular file only if it doesn’t already exist.

To create a file if one doesn’t already exist, enter the following at a command line:

[ ! –f /tmp/test.txt ] && touch /tmp/test.txt

The exclamation point ! stands for not. This command makes sure there is not a file named test.txt in the /tmp directory. You won’t see anything happen.

To see if the system created the file, enter the following:

ls /tmp

You should see test.txt listed. You can use a similar command for a directory – replace the –f option with –d:

[ ! –d /tmp/test ] && touch /tmp/test 

How to Check for Multiple Files

To test for two files at the same time use the && option to add a second file:

[ -f /tmp/test.txt && -f /tmp/sample.txt ] && echo “Both files were found”

To test for multiple files with a wildcard, like an asterisk * to stand for various characters:

[ -f /tmp/*.jpg ] && echo “Files were found”

As usual, changing the –f option to –d lets you run the same test for multiple directories.

File Test Operators to Find Prticular Types of Files

Here are several commands to test to find specific types of files:

  • -f – file
  • -d – directory
  • L – symbolic link
  • -r – readable
  • -x – executable
  • w – writable

There are many other options available. Please consult the main page (test ––help) for additional options.

Working with Code Snippets

The previous commands work well for a simple two-line command at a command prompt. You can also use bash with multiple commands. When several commands are strung together, they are called a script.

A script is usually saved as a file and executed. Scripting also uses logical operators to test for a condition, then takes action based on the results of the test.

To create a script file, use the Nano editor to open a new file:

sudo nano bashtest.sh

Enter one of the snippets from below, including the #!/bin/bash identifier. Use Ctrl-o to save the file, then Ctrl-x to exit Nano. Then, run the script by entering:

bash bashtest.sh

The following code snippet tests for the presence of a particular file. If the file exists, the script displays File exists on the screen.

#!/bin/bash

if [ -f /tmp/test.txt ]

then

echo “File exists”

fi

This works the same if you’re checking for a directory. Just replace the –f option with –d:

#!/bin/bash

if [ -d /tmp/test ]

then 

echo “File exists”

fi

This command checks for the directory /tmp/test. If it exists, the system displays File exists.

Conclusion

You can now use bash to check if a file and directory exist. You can also create simple test scripts as you now understand the functions of a basic bash script file. Next, you should check out our post on Bash Function.

Was this article helpful?
YesNo
Vladimir Kaplarevic
Vladimir is a resident Tech Writer at phoenixNAP. He has more than 7 years of experience in implementing e-commerce and online payment solutions with various global IT services providers. His articles aim to instill a passion for innovative technologies in others by providing practical advice and using an engaging writing style.
Next you should read
How To Install and Use Linux Screen, With Commands
April 7, 2022

Screen is a powerful tool for working in the command line. It lets you create, monitor, and switch between...
Read more
How to Copy Files and Directories in Linux
May 21, 2019

Want to learn how to copy files in Linux OS? This guide will show you how to use the Linux commands to copy...
Read more
How to View & Read Linux Log Files
February 13, 2019

All Linux systems create and store information log files for boot processes, applications, and other events...
Read more
Linux SCP Command: Securely Copy & Transfer Files
August 30, 2019

Tutorial on securely transferring files between Unix or Linux systems using the SCP command. The SCP or...
Read more