Linux / UNIX: Find Out If a Directory Exists or Not

Posted on in Categories CentOS, Debian Linux, File system, Gentoo Linux, Howto, Linux, Open source coding, programming, RedHat/Fedora Linux, Shell scripting, Suse Linux, Sys admin, Ubuntu Linux, UNIX last updated November 16, 2008

I’ve already written a small tutorial about finding out if a file exists or not under Linux / UNIX bash shell. However, couple of our regular readers like to know more about a directory checking using if and test shell command.

General syntax to see if a directory exists or not

[ -d directory ]
OR
test directory
See if a directory exists or not with NOT operator:
[ ! -d directory ]
OR
! test directory

Find out if /tmp directory exists or not

Type the following command:
$ [ ! -d /tmp ] && echo 'Directory /tmp not found'
OR
$ [ -d /tmp ] && echo 'Directory found' || echo 'Directory /tmp not found'

Sample Shell Script to gives message if directory exists

Here is a sample shell script:

#!/bin/bash
DIR="$1"
 
if [ $# -ne 1 ]
then
	echo "Usage: $0 {dir-name}"
	exit 1
fi
 
if [ -d "$DIR" ]
then
	echo "$DIR directory  exists!"
else
	echo "$DIR directory not found!"
fi

Posted by: Vivek Gite

The author is the creator of nixCraft and a seasoned sysadmin and a trainer for the Linux operating system/Unix shell scripting. He has worked with global clients and in various industries, including IT, education, defense and space research, and the nonprofit sector. Follow him on Twitter, Facebook, Google+.

7 comment

  1. Dear Friends,

    We can do the same thing to check a file exist or not by modifying the “if” loop like the following.

    !/bin/bash
    FILE=”$1″

    if [ $# -ne 1 ]
    then
    echo “Usage: $0 {file-name}”
    exit 1
    fi

    if [ -f “$FILE” ]
    then
    echo “$FILE file exists!”
    else
    echo “$FILE file not found!”
    fi

    1. u can use test -f to check whether filename exists or not
      u can use test -d to check whether directoryname exists or not

      Returns “zero” if exists and “one” if doesn’t exist.

  2. i need to print the file names of all files having .txt extension of a given directory after converting to uppercase letters. The input (directory name) should be given as command line argument. The script will also check whether sufficient arguments are passed or not and whether the argument is a directory or not

    i tried using this code

    if [ -f $filename ]
    tr “[a-z]” “[A-Z]” <$filename

    but i dint get output

  3. #!/bin/bash
    # dirtest.bash – Demo script by nixCraft under GPL v2.x+
    # ——————————————————-
    dir=”$1″

    [ $# -eq 0 ] &if [ -d “$dir” -a ! -h “$dir” ]
    then
    echo “$dir found and setting up new Apache/Lighttpd/Nginx jail, please wait…”
    # __WWWJailSetup “cyberciti.biz” “setup”
    else
    echo “Error: $dir not found or is symlink to $(readlink -f ${dir}).”
    fi

Leave a Comment