#!/bin/sh ## ## dms -- document management system ## ## $ v. 0.1 2008-01-18 Pouya D. Tafti $ ## USAGE='usage: dms add "authors" dms tag dms auth dms grep each author name should be a single word. example: dms add ch.pdf "calvin hobbes" fun/comics 1980s 1990s' ## CONFIGURATION ## DOCHOME="$HOME/doc/dms" DBFILE="dms.list" TMPFILE="/tmp/dms-$$.swp" ## CODE ## case $1 in add) test $# -lt 3 && { echo "$USAGE" ; exit 127 ; } shift FPATH=$1 FN=`basename $1` AUTHORS="$2" shift 2 TAGS="$*" echo "$FN ; auths: $AUTHORS ; tags: $TAGS" test -e "$FPATH" || { echo "$FPATH not found." ; exit 1 ; } test -e "$DOCHOME/all/$FN" && { echo "filename collision; rename the file and retry." ; exit 1 ; } ( mkdir -p $DOCHOME/all && cp "$FPATH" $DOCHOME/all/ ) || { echo "write error." ; exit 1 ; } echo -n "$FN; auths: " >> "$DOCHOME/$DBFILE" for AUTHOR in $AUTHORS; do mkdir -p "$DOCHOME/authors/$AUTHOR" && ln -s "$DOCHOME/all/$FN" "$DOCHOME/authors/$AUTHOR/$FN" && echo -n "$AUTHOR " >> "$DOCHOME/$DBFILE"; done echo -n "; tags: " >> "$DOCHOME/$DBFILE" for TAG in $TAGS; do mkdir -p "$DOCHOME/tags/$TAG" && ln -s "$DOCHOME/all/$FN" "$DOCHOME/tags/$TAG/$FN" && echo -n "$TAG " >> "$DOCHOME/$DBFILE"; done echo ";" >>"$DOCHOME/$DBFILE" ;; tag) test $# -lt 2 && { echo "$USAGE" ; exit 127 ; } shift TAGS="$*" cp "$DOCHOME/$DBFILE" "$TMPFILE" for TAG in $TAGS; do cat "$TMPFILE" | grep 'tags:.*'"$TAG"'[^;]*;' > "$TMPFILE" ; done cat "$TMPFILE" ; ;; auth) test $# -lt 2 && { echo "$USAGE" ; exit 127 ; } shift AUTHORS="$*" cp "$DOCHOME/$DBFILE" "$TMPFILE" for AUTHOR in $AUTHORS; do cat "$TMPFILE" | grep 'auths:.*'"$AUTHOR"'[^;]*;' > "$TMPFILE" ; done cat "$TMPFILE" ; ;; grep) test $# -lt 2 && { echo "$USAGE" ; exit 127 ; } shift cat "$DOCHOME/$DBFILE" | grep -e $* ;; *) echo "$USAGE" exit 127 ;; esac