#!/bin/bash set -eu mail='user@example.com' output_dir='/tmp/md5sums' dirs=( "$HOME/todo" #/exemples/to/monitor ) diff_two_last_by_mail() { if [ $# -lt 2 ]; then return # nothing to done then not at least two files to compare fi diff -u <(zcat "$1") <(zcat "$2") \ | ifne mail -s "Changes in md5sums between $1 and $2" "$mail" } mkdir -p "$output_dir" for dir in "${dirs[@]}"; do basefn="$(printf "%s\n" "$dir" | sed 's:/:_:g;s/^_//;s/_$//')" outputfn="$output_dir/${basefn}_$(date +%F_%T).md5sum.gz" find "$dir"/ -type f -print0 | sort -z | xargs -0 md5sum -b \ | gzip -9 > "$outputfn" diff_two_last_by_mail \ $(find "$output_dir"/ -name "${basefn}*.md5sum.gz" | sort | tail -n 2) done