#!/bin/bash # # Fast way to browse documents stored in an archive. # # Parameters PROGRAM="$0" BASENAME="`basename $0`" DOCS="$HOME/data/doc" BIBLIO="$DOCS/bibliographies" 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" ARG="$1" EXTRA_ARG="$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 "$ARG" ]; then echo "usage: $BASENAME [option] [] [extra-args]" echo " $BASENAME --refresh" echo " $BASENAME -- " echo " $BASENAME --open " echo " $BASENAME --rifle -p 4" echo " $BASENAME --koreader " echo " $BASENAME --watch " echo " $BASENAME " exit 1 elif [ "$ARG" == "--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 "*$ARG*" | head -1 | while read entry; do xdg-open "$entry"; done if [ "$ARG" == "--search" ]; then shift grep -i -- "$*" $LIST elif [ "$ARG" == "--details" ]; then shift entry="`echo $* | sed -e 's/^@//'`" if grep -qiR -- "$entry" $BIBLIO; then grep -iR -- "$entry" $BIBLIO | cut -d : -f 1 | while read file; do echo "At $file:" echo "" # Thanks https://tex.stackexchange.com/questions/28506/how-to-use-a-command-line-tool-to-extract-a-bibtex-reference-that-contains-a-sea awk -v RS='\n@' "/${entry}/" $file done else find $DOCS -name ${1}.bib -exec cat {} \; fi elif [ "$ARG" == "--watch" ]; then # Convert symlink to full path and start inotifywait loop folder="`readlink -f $DOCS`" subfolder="$EXTRA_ARG" 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 shift 2 EXTRA_ARGS="$*" # Allows for specifying a custom command to open the file if [ "${ARG:0:2}" == "--" ] && [ ! -z "$EXTRA_ARG" ]; then OPEN="${ARG:2}" ARG="$EXTRA_ARG" # Shortcuts for xdg-open if [ "$OPEN" == "open" ] || [ "$OPEN" == "read" ]; then OPEN="xdg-open" fi else OPEN="xdg-open" EXTRA_ARGS="" fi grep -i -- "$ARG" $LIST | while read entry; do echo "Opening $entry..." cd $DOCS && $OPEN $EXTRA_ARGS "$entry" done fi