编写bash脚本的时候经常遇到检查某个路径是否存在的时候,此时我们会使用-d
和if
语句来达成目标。例如,当路径存在的时候我们想做一些操作,有
if [ -d "$DIRECTORY" ]; then
# operations here
fi
或者当不存在的时候做一些操作
if [ ! -d "$DIRECTORY"]; then
# operations here
fi
然而,如果该路径是链接的话会出现问题,比如
ln -s "$ACTUAL_DIR" "$SYMLINK"
if [ -d "$SYMLINK" ]; then
rmdir "$SYMLINK"
fi
会产生错误
rmdir: failed to remove `symlink': Not a directory
#错误, 'symlink'不是一个路径
所以,最完整的做法是加入是否为链接的判断,如下
if [ -d "$LINK_OR_DIR" ]; then
if [ -L "$LINK_OR_DIR" ]; then
# 是一个链接
rm "$LINK_OR_DIR"
else
# 是一个路径
rmdir "$LINK_OR_DIR"
fi
fi