diff options
| author | Marc Vertes <mvertes@free.fr> | 2020-06-09 01:10:47 +0200 |
|---|---|---|
| committer | Marc Vertes <mvertes@free.fr> | 2020-06-09 01:10:47 +0200 |
| commit | d753d0f7cf3036e8e333bc6d806c90b4883bfcbf (patch) | |
| tree | 5350e777954668613154d44c4ba2401ff3ffce75 /bin/diffdir | |
| parent | ac250f6b13887d5110ed52340f6ca00cc24d4167 (diff) | |
diffdir
Diffstat (limited to 'bin/diffdir')
| -rwxr-xr-x | bin/diffdir | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/bin/diffdir b/bin/diffdir new file mode 100755 index 0000000..57997ed --- /dev/null +++ b/bin/diffdir @@ -0,0 +1,43 @@ +#!/bin/sh + +Version='diffdir-0.1' + +diffdir() { + [ -f "/etc/backup/ignore" ] && xf=--exclude-from=/etc/backup/ignore || xf= + rsync -aDSniv $xf --delete $Optx "$2/" "$1" | + awk -v OptF="${OptF#./}" -v prefix=$prefix ' + NF == 0 {exit} + NR < 2 || /\/*\.dv$/ || /\/$/ {next} + # Match an itemized status for all versions of rsync -i + $1 !~ /^[<>ch.*][fdLDS+][.+?cstpoguaxz]+$/ {next} + {key = $1; file = substr($0, length(key) + 2)} + OptF && OptF != file {next} + key == "*deleting" {print "deleted " prefix file; next} + substr(key, 3, 7) == "+++++++" {print "created " prefix file; next} + { # Avoid false positive if only mtime is changed. + of = "'$1'/" file; gsub("'\''", "'\'\\\\\'\''", of) + nf = "'$2'/" file; gsub("'\''", "'\'\\\\\'\''", nf) + if (substr(key, 2, 1) == "L") { # Symlink + src = target = file + sub(/.* -> /, "", target); + sub(/ -> .*/, "", src); + "readlink '$2'/" src | getline otarget + if (target != otarget) + print "changed " src + } else if (system("cmp -s '\''" of "'\'\ \''" nf "'\''")) + print "changed " file + }' + # Or: scan key for file/link size, checksum or permission change + # rsync -c is required + #key ~ /[cps]/ { print "changed " prefix file }' +} + +while getopts :V opt; do + case $opt in + (V) echo "$Version"; exit ;; + (*) echo "Usage: $0 [-V]"; exit 1 ;; + esac +done +shift $((OPTIND - 1)) + +diffdir "$1" "$2" |
