测试断掉的连接

  1 #!/bin/bash
   2 # broken-link.sh
   3 # 由Lee bigelow所写<[email protected]>
   4 # 已经征得作者的同意.
   5
   6 #一个用于发现死符号链接并且输出它们的链接文件的纯shell的脚本。
   7 #所以它们能把输出提供给xargs并处理
   8 #例如: broken-link.sh /somedir /someotherdir|xargs rm
   9 #
  10 #下面是更好的发现死符号链接的办法:
  11 #
  12 #find "somedir" -type l -print0|\
  13 #xargs -r0 file|\
  14 #grep "broken symbolic"|
  15 #sed -e 's/^\|: *broken symbolic.*$/"/g'
  16 #
  17 #但这不是纯bash脚本,下面的则是.
  18 #注意: 谨防在/proc文件系统和死循环链接中使用!
  19 ##############################################################
  20
  21
  22 #如果没有参数被传递给脚本作为搜索目录,则使用当前目录
  23 #
  24 #
  25 ####################
  26 [ $# -eq 0 ] && directorys=`pwd` || directorys=$@
  27
  28 #Setup the function linkchk to check the directory it is passed
  29 #for files that are links and don't exist, then print them quoted.
  30 #If one of the elements in the directory is a subdirectory then
  31 #send that send that subdirectory to the linkcheck function.
  32 ##########
  33 linkchk () {
  34     for element in $1/*; do
  35     [ -h "$element" -a ! -e "$element" ] && echo \"$element\"
  36     [ -d "$element" ] && linkchk $element
  37     # Of course, '-h' tests for symbolic link, '-d' for directory.
  38     done
  39 }
  40
  41 #Send each arg that was passed to the script to the linkchk function
  42 #if it is a valid directoy.  If not, then print the error message
  43 #and usage info.
  44 ################
  45 for directory in $directorys; do
  46     if [ -d $directory ]
  47 then linkchk $directory
  48 else
  49     echo "$directory is not a directory"
  50     echo "Usage: $0 dir1 dir2 ..."
  51     fi
  52 done
  53
  54 exit 0

你可能感兴趣的:(脚本,bash)