X-Git-Url: https://www.fleuret.org/cgi-bin/gitweb/gitweb.cgi?p=scripts.git;a=blobdiff_plain;f=gma.sh;h=1e79c72c96bbf3ba7d183730e433bdd3127aa3fe;hp=ae7bdcd6096adc5c1de6bb1914d8f926ee28c59c;hb=9fcf8afdc215faca5b95075189e582a9d8581942;hpb=a51bace8358de5f9a293d263480370226b3427a5 diff --git a/gma.sh b/gma.sh index ae7bdcd..1e79c72 100755 --- a/gma.sh +++ b/gma.sh @@ -19,6 +19,10 @@ set -e +function usage () { + echo "gma.sh [--body] [--keepspam] [--subject|--from|--to|--fromto] []" +} + RESULT_MBOX="/tmp/gma" if [[ -z "${MAIL_ARCHIVE_DIR}" ]]; then @@ -26,36 +30,88 @@ if [[ -z "${MAIL_ARCHIVE_DIR}" ]]; then exit 1 fi -if [[ $1 ]]; then +HEADER_ONLY="-H" + +while [[ $1 ]]; do + + case $1 in + + "--help"|"-h") + usage + exit 0 + ;; + + "--body") + HEADER_ONLY="" + ;; - PATTERN=$1 + "--keepspam") + KEEP_SPAM=1 + ;; - if [[ -z "${PATTERN}" ]]; then - echo "No pattern." >&2 - exit 1 - fi + "--from") + RE_PREFIX="^From:.*" + ;; - if [[ $2 ]]; then - FILE_PATTERN="${MAIL_ARCHIVE_DIR}/${2}/*/*gz" - SIZE=$(\dus ${MAIL_ARCHIVE_DIR}/${2} | cut -f 1 -d" ") - else - FILE_PATTERN="${MAIL_ARCHIVE_DIR}/*/*/*gz" - SIZE=$(\dus ${MAIL_ARCHIVE_DIR}/ | cut -f 1 -d" ") - fi + "--to") + RE_PREFIX="^To:.*" + ;; - echo "Looking for ${PATTERN}" - echo " in ${FILE_PATTERN}" - echo " writing result in ${RESULT_MBOX}" + "--fromto") + RE_PREFIX="^(From|To):.*" + ;; + + "--subject") + RE_PREFIX="^Subject:.*" + ;; + + *) + if [[ ${PATTERN} ]]; then + # If we already have the pattern to match in the + # message, get the new argument as a pattern for the + # filename + if [[ ${FILE_PATTERN} ]]; then + usage + exit 1 + else + FILE_PATTERN="${MAIL_ARCHIVE_DIR}/${1}/*/*" + SIZE_FILE_PATTERN="${MAIL_ARCHIVE_DIR}/${1}" + fi + else + PATTERN=$1 + fi + ;; + esac + shift +done + +if [[ -z "${PATTERN}" ]]; then + usage + exit 1 +fi + +[[ ${FILE_PATTERN} ]] || FILE_PATTERN="${MAIL_ARCHIVE_DIR}/*/*/*" +[[ ${SIZE_FILE_PATTERN} ]] || SIZE_FILE_PATTERN="${MAIL_ARCHIVE_DIR}" + +SIZE=$(\dus ${SIZE_FILE_PATTERN} | cut -f 1 -d" ") + +echo "Looking for ${RE_PREFIX}${PATTERN}" +echo " in ${FILE_PATTERN}" +echo " writing result in ${RESULT_MBOX}" + +if [[ ${KEEP_SPAM} ]]; then cat ${FILE_PATTERN} \ | pv -s ${SIZE} -p -t -e - \ - | zcat \ - | mboxgrep -i "$1" \ - | mboxgrep -v '^Subject:.*SPAM' > ${RESULT_MBOX} - echo "Found "$(grep ^"From " ${RESULT_MBOX} | wc -l)" messages." + | mboxgrep ${HEADER_ONLY} -i "${RE_PREFIX}${PATTERN}" > ${RESULT_MBOX} else - rm -i ${RESULT_MBOX} + cat ${FILE_PATTERN} \ + | pv -s ${SIZE} -p -t -e - \ + | mboxgrep ${HEADER_ONLY} -i "${RE_PREFIX}${PATTERN}" \ + | mboxgrep ${HEADER_ONLY} -v '^Subject:.*SPAM' > ${RESULT_MBOX} fi + +echo "Found "$(grep ^"From " ${RESULT_MBOX} | wc -l)" messages."