#! /bin/bash
# Last edited on 2017-06-09 02:52:38 by stolfilocal

# Checks whether the directory structure is being observed

# remove empty directories:

find objs -type d -empty -print > .empties
if [[ -s .empties ]]; then
  echo "** some empty directories:" 1>&2
  cat .empties
  exit 1
else
  rm -f .empties
fi

# collect the scansets

( shopt -s nullglob; ls -d objs/*/* ) \
  | egrep -v -e '^objs/[a-z0-9]{6}_[0-9]{2}/00-README$' \
  > .sets

cat .sets \
  | egrep -v -e '^objs/[a-z0-9]{6}_[0-9]{2}/[0-9]{4}-[0-9]{2}-[0-9]{2}-[0-9]{4}$' \
  > .badsets
if [[ -s .badsets ]]; then
  echo "** bad scanset directories:" 1>&2
  cat .badsets
  exit 1
else
  rm -f .badsets
fi
for dir in `cat .sets` ; do
  if [[ ! -d ${dir} ]]; then
    echo "** ${dir} : not a directory" 1>&2 
    exit 1
  fi
done

# Get all files in {objs}:

find objs/ -type f -print > .files

egrep -e '.objs' .files > .bogusfiles
fgrep -v -f .sets .files >> .bogusfiles

if [[ -s .bogusfiles ]]; then
  echo "** unexpected files:" 1>&2
  cat .bogusfiles
  exit 1
else
  rm -f .bogusfiles
fi

# Check file names:
for dir in `cat .sets` ; do 
  find ${dir}/ -type f -print > .setfiles
  cat .setfiles \
    | sed -e 's:^..../......_[0-9][0-9]/[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]-[0-9][0-9][0-9][0-9]/::g' \
    | egrep -v -e '^00-README$' \
    | egrep -v -e '^L_[0-9]{2}/V_00/(raw|align|clip_[0-9]{2})/(frame_[0-9]{5}|merge).(jpg|tif|png)$' \
    | egrep -v -e '^L_[0-9]{2}/V_00/raw/output/.*$' \
    > .badfiles
  if [[ -s .badfiles ]]; then
    echo "** ${dir} : filenames out of standard:" 1>&2
    cat .badfiles
    exit 1
  else
    rm -f .badfiles
  fi
done
