#!/bin/bash # # Fast way to browse documents stored in an archive. # # Parameters PROGRAM="$0" BASENAME="`basename $0`" DOCS="$HOME/data/doc" FILELIST=".filelist" LIST="$DOCS/$FILELIST" DOC_PATTERN=".*\.(txt|doc|docx|rtf|pdf|sxc|csv|odt|odf|ods|xls|xlsx|ppt|epub|mobi|djvu|lit)" FIND_OPTS="-not -path '*.git*' -regextype posix-egrep -iregex" ITEM="$1" OPTION="$2" DATE="`date +%s`" MAX_AGE="86400" # Update the filelist function __update_filelist { echo "Generating new filelist..." # Unnanex if it was erroneously annexed if [ -h "$LIST" ] && [ -d "$DOCS/.git/annex" ]; then ( cd $DOCS && git annex unlock $FILELIST ) fi # Refresh cd $DOCS && find . $FIND_OPTS "$DOC_PATTERN" > $LIST # Stage git add $LIST } # Check if [ -z "$ITEM" ]; then echo "usage: $BASENAME " exit 1 elif [ "$ITEM" == "--refresh" ]; then __update_filelist elif [ ! -d "$DOCS" ]; then echo "missing $DOCS folder" exit 1 fi # Check for filelist if [ ! -e "$LIST" ]; then __update_filelist CHANGED="`date +%s`" else CHANGED="`stat --printf='%Y\n' $LIST`" fi # Automatically refresh lists older than $MAX_AGE #if ((($DATE - $CHANGED) >= $MAX_AGE)); then # __update_filelist #fi # Dispatch #find $DOCS -iname "*$ITEM*" | head -1 | while read entry; do xdg-open "$entry"; done if [ "$ITEM" == "--search" ]; then shift grep -i -- "$*" $LIST elif [ "$ITEM" == "--watch" ]; then # Convert symlink to full path and start inotifywait loop folder="`readlink -f $DOCS`" subfolder="$OPTION" echo "Watching changes at $folder/$subfolder..." #while inotifywait -e modify -e create -e move -e delete -r "$folder"; do #while inotifywait -e modify -e move -r "$folder"; do #while inotifywait -e modify -e move -r "$folder/$subfolder"; do while inotifywait -e modify -e create -e move -e delete -r "$folder/$subfolder"; do $PROGRAM --refresh done else grep -i -- "$ITEM" $LIST | while read entry; do echo "Opening $entry..." cd $DOCS && xdg-open "$entry" done fi