2014-02-10 137 views
1

我試圖創建一個腳本,通過搜索目錄來查找指向不存在的對象的符號鏈接。符號鏈接檢查 - Linux Bash腳本

我有一個文件在一個刪除符號鏈接的目錄,但由於某種原因,當我運行下面的腳本它說文件存在。

#!/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

檢查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 $? 
0

似乎有一個名爲symlinks程序,做,除其他事項外,你在找什麼。

2

您可以測試鏈接是否有效或者是不使用:

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

要檢查,如果它確實是一個鏈接使用-L

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