Linux Training

Linux training for private, public & voluntary sector.

0793 572 8612

City LinUX sample scripts - chklnks


#!/bin/bash
# $Id: chklnks,v 1.142 2023/06/16 17:15:35 fulford Exp fulford $
# $Source: /src/admin/usr/local/etc/RCS/chklnks,v $
# $Revision: 1.142 $
# Author C W Fulford.
# Copyright 2014 (c) C W Fulford.
# Licensed for public use under the LGPL, .
# For assistance contact fulford@fulford.net 0709 229 5385
########################################################################
cmd=`basename $0`
syntax="$cmd [-d] [[-h <hostid> [-r] [-v] [[-a]|[<dir_name> <dir_name> ...] -x <dir_name ]]|[-V]"
while [ $# -gt 0 ] ;do
	case $1 in 
		-a) all=0;shift;;
		-d) set -x;debug=:;shift;;
		-h) hostid=$2;shift 2;;
		-r) action=delete;shift;;
		-v) verbose=0;shift;;
		-V) echo "$cmd $Revision: 1.142 $ $Date: 2023/06/16 17:15:35 $"|awk '{print $1,$3,$6}';exit;;  
		-x) xdirs="$xdirs $1";shift 2;;
		 /*) paths="$paths $1";shift;;
	 	*) echo "$syntax" >&2;exit;;
	esac
done
action=${action:-"echo"}
all=${all:=1}
[ $all -eq 0  -a "$paths" ] &&{
	echo "$cmd: can't specify directories with the -a option" >&2
	echo "syntax: $syntax" >&2
	exit 1
}
tmounts=/tmp/mounts-$$
targets=/tmp/targets-$$;>$targets
verbose=${verbose:-1}
if [ "$hostid" ]; then
	if nc -zw 2 $hostid 22 ;then
		rchk="ssh $hostid"
		ssh $hostid "sudo cat /etc/mtab" >$tmounts
	else	
		echo "$cmd: ssh not available on $hostid" >&2
		exit 1
	fi
else
	cat /etc/mtab >$tmounts
fi
		
if [ $all -ne 0 ];then
	cat $tmounts| awk '{ print $2 }' 
	#egrep -v "/proc||^nfsd|gvfsd-fuse|sysfs|$xdirs" |
fi
echo $paths ;exit
paths=${paths:-"./"}
[ "$verbose" -eq 0 ] &&{
	echo "$cmd: paths = "$paths
}

for d in $paths;do
	if [ $verbose -eq 0 ];then
		echo "$cmd: checking directory $d"
	fi
	$rchk sudo find -P $d -xdev -type l -print >>$targets
	awk '{printf $1}' $targets |while read f ;do   
		if [ $action == "delete" ] ;then
			$rchk "sudo rm $f" 
			if [ $? -eq 0 -a $verbose -eq 0 ];then
				echo "$cmd: $f dead link removed" >&2
			fi
		else
			$action "$cmd: found dead link $r" >&2
		fi	
	done	
done
if [ $debug ] ;then
	cat $tmounts $targets
else
	echo $tmounts $targets
	#sudo rm  $tmounts $targets
fi
######################################################################
# This program is free software: you can redistribute it and or      #
# modify it under the terms of the Lesser GNU General Public License #
# as published by the Free Software Foundation, either version 3 of  #
# the License, or (at your option) any later version.                #
#                                                                    #
# This program is distributed in the hope that it will be useful,    #
# but WITHOUT ANY WARRANTY; without even the implied warranty of     #    
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the      #
# GNU General Public License for more details.                       #
#                                                                    # 
# A copy of the Lesser GNU General Public License and the GNU        #
# General Public License is available at                             #
# <http://www.gnu.org/licenses/>.                                    #
######################################################################

The layout and associated style sheets for this page are taken from the World Wide Web Consortium and used here under the W3C software licence.