#!/bin/bash stripp () { echo "Stripping $1" find "$1" -type f -exec strff {} \; } SCRIPT=`basename $0` [ $# -lt 2 ] && echo "Usage: ${SCRIPT} [-2] " && exit 1 [ $# -gt 3 ] && echo "Usage: ${SCRIPT} [-2] " && exit 1 [ $# -eq 3 ] && PARA=$1 && shift DIR1=$1 DIR2=$2 LD1=`echo $DIR1|wc -c` TMP1=/tmp/${SCRIPT}_1.$$ TMP2=/tmp/${SCRIPT}_2.$$ TMP3=/tmp/${SCRIPT}_3.$$ [ ! -d "$DIR1" ] && echo "Error: Das Verzeichnis $DIR1 existiert nicht" && exit 2 [ ! -d "$DIR2" ] && echo "Error: Das Verzeichnis $DIR2 existiert nicht" && exit 3 [ "$PARA" = "-2" ] && stripp "$DIR1" && stripp "$DIR2" echo "Es wird angenommen, dass Dir1 das vermutlich unaktuellere ist !" echo "Redundante Dateien werden ohne weitere Nachfrage geloescht !" #Es geht los find "$DIR1" -type f -print >$TMP1 LINES=`cat $TMP1|wc -l` if [ $LINES -eq 0 ] then echo "Keine Dateien gefunden" rm -f $TMP1 $TMP2 $TMP3 exit 0 fi awk ' { OFS="|" ; print FNR,$0 } ' $TMP1 >$TMP2 #Redundant Files Count RFC=0 LL=1 touch $TMP3 while [ $LL -le $LINES ] do FILE=`awk -F'|' ' $1=="'${LL}'" { print $2 } ' $TMP2` FILE=`echo ${FILE}|cut -c${LD1}-|sed -e 's/´/ /g'` [ -f "${DIR2}/${FILE}" ] && diff "${DIR1}/${FILE}" "${DIR2}/${FILE}" 2>/dev/null && RFC=`expr ${RFC} + 1` && echo "FILE $FILE ist redundant und wird geloescht!" && rm "${DIR1}/${FILE}" LL=`expr ${LL} + 1` done echo "Loesche leere Verzeichnisse in ${DIR1}..." find "${DIR1}" -type d -exec rmdir -p {} \; 2>/dev/null #2.Runde find "$DIR1" -type f -print >$TMP1 LINES=`cat $TMP1|wc -l` if [ $LINES -eq 0 ] then echo "Keine Dateien gefunden" rm -f $TMP1 $TMP2 $TMP3 exit 0 fi awk ' { OFS="|" ; print FNR,$0 } ' $TMP1 >$TMP2 #New Files Count NFC=0 CFC=0 LL=1 touch $TMP3 while [ $LL -le $LINES ] do FILE=`awk -F'|' ' $1=="'${LL}'" { print $2 } ' $TMP2` FILE=`echo ${FILE}|cut -c${LD1}-|sed -e 's/´/ /g'` ################## if [ -f "${DIR2}/${FILE}" ] then diff "${DIR1}/${FILE}" "${DIR2}/${FILE}" 2>/dev/null if [ $? -ne 0 ] then CFC=`expr ${CFC} + 1` STAMP="dsync--"`date "+%Y%m%d%H%M%S"` echo "Benenne ${DIR1}/${FILE} zu ${DIR2}/${FILE}--${STAMP}" mv ${DIR1}/${FILE} ${DIR2}/${FILE}--${STAMP} #rm "${DIR1}/${FILE}" fi fi ################## if [ ! -f "${DIR2}/${FILE}" ] then NFC=`expr ${NFC} + 1` echo "${DIR2}/${FILE}" >>$TMP3 echo "FILE ${DIR2}/${FILE} existiert nicht!" TMFN=${FILE} [ `echo ${TMFN}|cut -c1` = '/' ] && TMFN=`echo $TMFN|cut -c2-` DESTD=${DIR2} TC1=`echo $TMFN|cut -d'/' -f1` TC2=`echo $TMFN|cut -d'/' -f2` TCL1=`echo $TC1|wc -c` TCL2=`echo $TC2|wc -c` TMFNL=`echo $TMFN|wc -c` while [ ${TCL1} -lt ${TMFNL} ] do TMFN=`echo $TMFN|cut -c${TCL1}-` [ `echo ${TMFN}|cut -c1` = '/' ] && TMFN=`echo $TMFN|cut -c2-` DESTD=${DESTD}/${TC1} [ ! -d ${DESTD} ] && echo "Erzeuge Verzeichnis $DESTD..." [ ! -d ${DESTD} ] && mkdir "${DESTD}" # TC1=`echo $TMFN|cut -d'/' -f1` TC2=`echo $TMFN|cut -d'/' -f2` TCL1=`echo $TC1|wc -c` TCL2=`echo $TC2|wc -c` TMFNL=`echo $TMFN|wc -c` done echo "Verschiebe ${DIR1}/${FILE} nach ${DESTD}/${TMFN}" mv "${DIR1}/${FILE}" "${DESTD}/${TMFN}" || echo "Error File ${FILE}" fi LL=`expr ${LL} + 1` done echo "${RFC} Dateien wurden geloescht" echo "${NFC} Dateien wurden verschoben" echo "${CFC} Dateien wurden umbenannt" echo "Loesche leere Verzeichnisse in ${DIR1}..." find "${DIR1}" -type d -exec rmdir -p {} \; 2>/dev/null [ -d ${DIR1} ] && du ${DIR1}|tail -1 [ ! -d ${DIR1} ] && echo "Verzeichnis ${DIR1} erfolgreich syncronisiert" rm -f $TMP1 $TMP2 $TMP3