#!/bin/bash # fast-repair version #VERSION# [ -r "/etc/backup.conf" ] && \ . "/etc/backup.conf" dummy=false if [ $# -eq 1 ] \ && [ "$1" == "-d" ] then shift dummy=true fi if [ $# -ne 0 ] then >&2 echo "too many arguments: '$@'" exit 1 fi for backupID in "${!backups[@]}" do backupDir="${backups["${backupID}"]%% *}" lastDate="$( ls -1 "${backupDir}" | \ sort -r | \ grep -m1 '^[0-9]\{4\}\(_[0-9]\{2\}\)\{2\}$' )" dateList=$( ls -1 "${backupDir}" | \ sort -r | \ grep '^[0-9]\{4\}\(_[0-9]\{2\}\)\{2\}$' | \ grep -v "^${lastDate}" ) [ -z "${dateList}" ] \ && continue set -e echo -n "${backupID}: " find "${backupDir}${lastDate}" -type f -links 1 | \ wc -l find "${backupDir}${lastDate}" -type f -links 1 | \ sed "s|^${backupDir}${lastDate}/||" | \ while read -r datei do for date in ${dateList} do [ -f "${backupDir}${date}/${datei}" ] \ || break diff -q "${backupDir}${lastDate}/${datei}" "${backupDir}${date}/${datei}" > /dev/null \ || break nlinks=$( stat -c'%h' "${backupDir}${date}/${datei}" ) [ ${nlinks} -eq 65000 ] \ && continue rights=$(stat -c'%a' "${backupDir}${lastDate}/${datei}") uid=$(stat -c'%u' "${backupDir}${lastDate}/${datei}") gid=$(stat -c'%g' "${backupDir}${lastDate}/${datei}") timeModification=$(stat -c'%y' "${backupDir}${lastDate}/${datei}") echo rm \"${backupDir}${lastDate}/${datei}\" echo ln \"${backupDir}${date}/${datei}\" \"${backupDir}${lastDate}/${datei}\" echo chown ${uid}:${gid} \"${backupDir}${lastDate}/${datei}\" echo chmod ${rights} \"${backupDir}${lastDate}/${datei}\" echo touch -m -d \"${timeModification}\" \"${backupDir}${lastDate}/${datei}\" if ! ${dummy} then rm "${backupDir}${lastDate}/${datei}" ln "${backupDir}${date}/${datei}" "${backupDir}${lastDate}/${datei}" chown ${uid}:${gid} "${backupDir}${lastDate}/${datei}" chmod ${rights} "${backupDir}${lastDate}/${datei}" touch -m -d "${timeModification}" "${backupDir}${lastDate}/${datei}" fi break done done set +e done