Thursday, June 20, 2019

unix - Check if a directory exists in a shell script



What command can be used to check if a directory exists or not, within a shell script?


Answer



To check if a directory exists in a shell script you can use the following:



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, as Jon Ericson points out, subsequent commands may not work as intended if you do not take into account that a symbolic link to a directory will also pass this check.
E.g. 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






Take particular note of the double-quotes used to wrap the variables, the reason for this is explained by 8jean in another answer.



If the variables contain spaces or other unusual characters it will probably cause the script to fail.


No comments:

Post a Comment

plot explanation - Why did Peaches' mom hang on the tree? - Movies & TV

In the middle of the movie Ice Age: Continental Drift Peaches' mom asked Peaches to go to sleep. Then, she hung on the tree. This parti...