From 314ad8d94c5ff33fd2eadb1027748550be0e7e4f Mon Sep 17 00:00:00 2001 From: Erich Eckner Date: Sun, 10 Feb 2019 22:36:04 +0100 Subject: camelCase -> no-camel-case, backup-progress new --- fast-repair.in | 88 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 88 insertions(+) create mode 100644 fast-repair.in (limited to 'fast-repair.in') diff --git a/fast-repair.in b/fast-repair.in new file mode 100644 index 0000000..9d5224a --- /dev/null +++ b/fast-repair.in @@ -0,0 +1,88 @@ +#!/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 -- cgit v1.2.3-54-g00ecf