check_links.sh 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. #!/bin/bash
  2. usage() {
  3. echo ""
  4. echo "Usage: $(basename $0) <index> <src>"
  5. echo " <index> Index.html file to start link scanning at."
  6. echo " <src> Directory with doxygen source files."
  7. echo ""
  8. }
  9. if [ ! -f "$1" ]; then
  10. if [ -z "$1" ]; then
  11. echo "No index file provided!" >&2
  12. else
  13. echo "Index file not found: '$1'" >&2
  14. fi
  15. usage
  16. exit 1
  17. fi
  18. if [ ! -d "$2" ]; then
  19. if [ -z "$2" ]; then
  20. echo "No source directory provided!" >&2
  21. else
  22. echo "Source dir not found: '$2'" >&2
  23. fi
  24. usage
  25. exit 1
  26. fi
  27. linkchecker -F csv --timeout 3 --check-extern $1
  28. OFS=$IFS
  29. IFS=$'\n'
  30. for line in $(grep -E '^[^#]' linkchecker-out.csv | tail -n +2); do
  31. link=$(echo $line | cut -d';' -f 1)
  32. msg=$(echo $line | cut -d';' -f 4)
  33. origin=$(grep -Ern "href=['\"]${link}['\"]" $2)
  34. for o in $origin; do
  35. ofile=$(echo $o | cut -d':' -f 1)
  36. oline=$(echo $o | cut -d':' -f 2)
  37. match=$(echo $o | cut -d':' -f 3-)
  38. rest="${match#*$link}"
  39. ocolumn=$((${#match} - ${#rest} - ${#link}))
  40. echo "$(readlink -f -n $ofile):${oline}:${ocolumn};${link};${msg};URL '${link}' results to '${msg}'" >&2
  41. done
  42. done
  43. IFS=$OFS
  44. exit 0