This is a script I wrote for work to look through a number of remote servers via ssh (shared keys or include a .pem (id_rsa) file to compare a paths and all it’s subfolders.
The result is a report of which files are out of synch and if duplicates found they are listed separately.
#!/bin/bash ## Parameters sync_check [-i id.pem] [-u <user for ssh>] -p <path_to_diff> <target-system-IP1> <target-system-IP2> ... # David Saliba [dx@sudoall.com] RED='\033[0;31m' YELLOW='\033[1;33m' NC='\033[0m' # No Color PEMFILE="" SSH_USER="root" function usage { echo echo -e "\t$0 usage as follows :" echo -e "\t$0 [-i <pem_file>] [-u <ssh_user_name>] -p <path_to_diff> <ref-system-IPADDR1> <target-system-IP1> <target-system-IP2>..." echo } [ $# -le 2 ] && echo && echo -e "${RED}Incorrect number of parameters ${NC}" && usage && exit 128 while getopts "i:u:p:" opt; do echo $opt $OPTARG case $opt in i ) PEMFILE=$OPTARG; shift $((OPTIND-1)); OPTIND=1 ; if [[ -f "$PEMFILE" ]]; then PEMFILE="-i ""$PEMFILE" else echo "Pemfile : $PEMFILE not found. Quitting .. " exit 1 fi ;; u ) SSH_USER=$OPTARG ; shift $((OPTIND-1)); OPTIND=1 ;; p ) PATH_TO_CHECK=$OPTARG ; shift $((OPTIND-1)); OPTIND=1 ;; * ) usage exit 128 esac done extfile="_target.md5.sync_check" echo; echo rm -f /tmp/*.sync_check for i in $* ; do ipcalc -cs $i if [ $? == 0 ] ; then echo -n "Retrieving Signature List from .. :[$i] : " ssh $PEMFILE $SSH_USER@$i "hostname" COMMAND="ssh $PEMFILE $SSH_USER@$i \"find $PATH_TO_CHECK -type f -exec md5sum {} \\; | sed -e 's/^/$i\t/'| sort -k 2 \"" #echo "Running : $COMMAND /tmp/$i""_target.md5.sync_check" bash -c "$COMMAND" > /tmp/$i$extfile else echo "Parameter $i not a valid IP skipping .." fi done echo ;echo; echo "Comparing data ... "; echo OLDIFS=$IFS; IFS=$'\n'; for i in `cat /tmp/*.sync_check | sort -k3 | uniq -f 1 -c | sort | egrep -v "^[\ \t]*$#" | sort -k4 ` ;do NUMBER_OF_HITS=`echo "$i" | awk '{print ($1)}'` echo $i if [ $NUMBER_OF_HITS -gt 1 ] ; then MD5Onward=`echo "$i" | awk '{print substr($0, index($0,$3))}'` echo -e -n "${YELLOW}" grep -h "$MD5Onward" /tmp/*.sync_check | awk '{print "\t\t",NR, $0}' echo -e -n "${NC}" fi done ; IFS=$OLDIFS echo echo
link to file here: http://jist.sudoall.com/sync_check/sync_check.sh
nJoy 😉