How can I check if a directory exists in a Bash shell script?

后端 未结 30 1987
猫巷女王i
猫巷女王i 2020-11-22 10:35

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

30条回答
  •  有刺的猬
    2020-11-22 11:21

    There are great solutions out there, but ultimately every script will fail if you're not in the right directory. So code like this:

    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
    

    will execute successfully only if at the moment of execution you're in a directory that has a subdirectory that you happen to check for.

    I understand the initial question like this: to verify if a directory exists irrespective of the user's position in the file system. So using the command 'find' might do the trick:

    dir=" "
    echo "Input directory name to search for:"
    read dir
    find $HOME -name $dir -type d
    

    This solution is good because it allows the use of wildcards, a useful feature when searching for files/directories. The only problem is that, if the searched directory doesn't exist, the 'find' command will print nothing to standard output (not an elegant solution for my taste) and will have nonetheless a zero exit. Maybe someone could improve on this.

提交回复
热议问题