How to check that if a directory exists in a Bash shell script?
In my shell script, I need to check if a directory exists or not. So, here what command I should use to verify a directory exist or not in a given path?
To check if a directory exists in a shell script:
if [ -d "$DIRECTORY" ]; then # Control will enter here if $DIRECTORY exists. fi
Or to check if a directory doesn't exist:
if [ ! -d "$DIRECTORY" ]; then # Control will enter here if $DIRECTORY doesn't exist. fi
However, subsequent commands may not fill in as proposed if you don't consider that a symbolic link to a directory will also pass this check. For example, running this:
ln -s "$ACTUAL_DIR" "$SYMLINK" if [ -d "$SYMLINK" ]; then rmdir "$SYMLINK" fi
Will produce the error message:
rmdir: failed to remove `symlink': Not a directory
So symbolic links may have to be treated differently if subsequent commands expect directories:
if [ -d "$LINK_OR_DIR" ]; then if [ -L "$LINK_OR_DIR" ]; then # It is a symlink! # Symbolic link specific commands go here. rm "$LINK_OR_DIR" else # It's a directory! # Directory command goes here. rmdir "$LINK_OR_DIR" fi fi
You can use -d with if condition to check if a directory exists or not:
if [ -d $DIRECTORY ]; then # $DIRECTORY exists. fi
Make sure to wrap factors by
double-quotes while referring to them in a Bash script. Because if
$DIRECTORY has spaces or special-characters then your script will blow up. You don't want that. So use this.
if [ -d "$DIRECTORY" ]; then # Will enter here if $DIRECTORY exists, even if it contains spaces fi
With the same syntax you can use:
-e: any kind of archive -f: file -h: symbolic link -r: readable file -w: writable file -x: executable file -s: file size greater than zero
Please login or create new account to participate in this conversation.