diff options
author | Erich Eckner <git@eckner.net> | 2016-12-17 22:20:29 +0100 |
---|---|---|
committer | Erich Eckner <git@eckner.net> | 2017-01-05 21:57:13 +0100 |
commit | 549fd13ee5fcf010ee98e6f011366e941dc738b0 (patch) | |
tree | 82a9527dfc270344d62d6f95d9a3f8ee08ab9f98 /fastRepair.in | |
parent | d19da7c994311424166bcefcadfe2d66c023bf95 (diff) | |
download | hardlinkedBackups-549fd13ee5fcf010ee98e6f011366e941dc738b0.tar.xz |
fastRepair neu
Diffstat (limited to 'fastRepair.in')
-rw-r--r-- | fastRepair.in | 88 |
1 files changed, 88 insertions, 0 deletions
diff --git a/fastRepair.in b/fastRepair.in new file mode 100644 index 0000000..fb89956 --- /dev/null +++ b/fastRepair.in @@ -0,0 +1,88 @@ +#!/bin/bash + +# fastRepair 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 |