符号链接检查 - Linux Bash脚本

时间:2014-02-10 12:10:58

标签: linux bash shell symlink

我正在尝试创建一个搜索目录的脚本,以查找指向不存在的对象的符号链接。

我在一个带有删除符号链接的目录中有一个文件,但出于某种原因,当我运行下面的脚本它说文件存在。

#!/bin/bash
ls -l $1 |
if [ -d $1 ]
  then
    while read file
    do
            if test -e $1
            then
                    echo "file exists"
            else
                    echo "file does not exist"
            fi
    done
 else
    echo "No directory given"
fi

由于

3 个答案:

答案 0 :(得分:4)

检查this page。它测试了断开的链接。它使用-h运算符来标识符号链接,使用-e运算符来检查存在。

从该页面开始:

linkchk () {
    for element in $1/*; do
      [ -h "$element" -a ! -e "$element" ] && echo \"$element\"
      [ -d "$element" ] && linkchk $element
    # Of course, '-h' tests for symbolic link, '-d' for directory.
    done
}

#  Send each arg that was passed to the script to the linkchk() function
#+ if it is a valid directoy.  If not, then print the error message
#+ and usage info.
##################
for directory in $directorys; do
    if [ -d $directory ]
    then linkchk $directory
    else 
        echo "$directory is not a directory"
        echo "Usage: $0 dir1 dir2 ..."
    fi
done

exit $?

答案 1 :(得分:2)

您可以使用以下方式测试链接是否有效

[[ -f "$link" ]] && echo "points to a valid file"

要检查它是否确实是链接,请使用-L

[[ -L "$link" ]] && echo "it's a link"

答案 2 :(得分:0)

似乎有一个名为symlinks的程序,除了其他功能之外,还有你正在寻找的东西。