I use this script for review. For a correct result Dovecot should not run.

#!/bin/bash

attdir="/var/files/attachments"
maildir="/var/mail"

cd "$attdir" || exit 1
find -type f -printf "%P\n" | grep -v "hashes" | sort -u >"$maildir/attachments.s"
cd "$maildir" || exit 2
rm "$maildir/files.ok" "$maildir/files.fail" 2>/dev/null
for f in $(find -type f -name "m.*" -printf "%P\n"); do
  doveadm dump -t dbox "$f" | egrep "^msg.ext-ref" | while read z; do
    set -- $z
    while [ -n "$1" ]; do
      if [[ $1 == */* ]]; then
test -r "$attdir/$1" && echo "$1" >>"$maildir/files.ok" || echo "$1" >>"$maildir/files.fail"
      fi
      shift
    done
  done
done
sort -u "$maildir/files.ok" >"$maildir/files.s"
diff -Nu "$maildir/attachments.s" "$maildir/files.s" | tee "$maildir/files.diff" | egrep "^\-"



Am 03.03.2015 um 22:08 schrieb Daniel Miller:
This seems simple enough...I'm just not script wizard. If someone can throw together a starting point I can test and tweak it from there. It seems to me:

1.  Read /var/mail/mail.err or specified logfile
2. For each "failed: read(/var/mail/attachments/aa/bb/attachmentHash-userHash" line,
    a. Confirm /var/mail/attachments/aa/bb/hashes/attachmentHash exists
i. If attachmentHash is missing display such for possible backup searching.
    b. create link attachmentHash-userHash to hashes/attachmentHash
3.  Continue to end of file

Can this be done via "pure" BASH?  Need sed/awk as well?

Reply via email to