# !/bin/sh

#================================================================
# estfind
# find utility to locate files - written by Magnus Damm
#================================================================


html_expr=".*\.htm\(l\)?"
html_mime="text/html"

text_expr=".*\.\(txt\|asc\)"
text_mime="text/plain"

pdf_expr=".*\.pdf"
pdf_mime="application/pdf"

doc_expr=".*\.doc"
doc_mime="application/msword"

xls_expr=".*\.xls"
xls_mime="application/vnd.ms-excel"

ppt_expr=".*\.ppt"
ppt_mime="application/vnd.ms-powerpoint"

xdw_expr=".*\.xdw"
xdw_mime="application/vnd.fujixerox.docuworks"

man_expr=".*\.[0-9]"
man_mime="application/x-troff-man"

available_templates="html text pdf doc xls ppt xdw man"


usage () {
  echo "usage: $0 [options] directory [iregex mime] ... [iregex mime]" 1>&2
  echo "  options:" 1>&2
  for t in $available_templates
  do
    x="${t}_expr"
    m="${t}_mime"
    expr="`eval echo \\\$$x`"
    mime="`eval echo \\\$$m`"
    printf "  -%-13s short for \"%s\" \"%s\"\n" $t $expr $mime 1>&2
  done
  echo "  -magic         use \"file\" to determine mime type as last resort" 1>&2
  echo "Use an empty mime type to ignore iregex, useful together with -magic." 1>&2
  exit 1
}


get_find_expr () {
  expr=$1
  mime=$2
  echo -n "( -iregex $expr -printf %p\t$mime\n ) -or "
}


get_ignore_expr () {
  expr=$1
  echo -n "( -iregex $expr ) -or "
}


use_magic=
find_expr=""

while [ "`echo $1 | cut -c 1`" = "-" ]
do
  case $1 in
  -magic) use_magic=yes; shift ;;
  *)
    t=`echo $1 | cut -d '-' -f 2-`
    x="${t}_expr"
    if [ -n "`eval echo \\\$$x`" ]; then
      m="${t}_mime"
      expr="`eval echo \\\$$x`"
      mime="`eval echo \\\$$m`"
      if [ -z "$mime" ]; then
        find_expr="${find_expr}`get_ignore_expr $expr`"
      else
        find_expr="${find_expr}`get_find_expr $expr $mime`"
      fi
    else
      usage
    fi
    shift
    ;;
  esac
done


if [ $# -lt 1 ]; then
  usage
fi


dir=$1
shift


while [ $# -ge 2 ]
do
  expr=$1
  shift
  mime=$1
  shift
  if [ -z "$mime" ]; then
    find_expr="${find_expr}`get_ignore_expr $expr`"
  else
    find_expr="${find_expr}`get_find_expr $expr $mime`"
  fi
done


if [ $# -ne 0 ]; then
  echo "error: premature end of arguments: iregex \"$1\" passed without mime" 1>&2
  exit 1
fi


if [ -n "$use_magic" ]; then
  find_expr="${find_expr}( -printf %p\t -exec file -b -i {} ; )"
else
  find_expr="${find_expr}-printf \c"
fi


find "$dir" -type f $find_expr


exit 0



# END OF FILE
