[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Is there an indexing tool in linux that can help quickly search the contents of all my files?



* Peng Yu <pengyu.ut@gmail.com> [090829 17:27]:
> In linux, I know the command 'locate' which search all the
> filenames. But I am wondering if there is a tool that can search
> file contents.
>
> I know that the combination of 'find' and 'grep' can search the
> contents, but it is slow. Can somebody let me know if there is a
> much faster solution which might rely on an indexing database?

After looking at the various options, I settled on recoll [1] which
I'm pretty happy with. Seems fast, it's F/OSS, and it's usable in a
cli/terminal environment (in addition to its gui, but I've yet to use
the GUI interface). Below is a shell script [2] I wrote that loads
the search results into the elinks browser. Then, after appropriately
configuring elinks, various search result items can be opened and
browsed in different tabs.

Regards,

John

*

[1] http://www.recoll.org/
    http://www.lesbonscomptes.com/recoll/usermanual/index.html


[2]

#!/bin/sh
# (c)2009 John Magolske, GPLv3
# last edit: 2009/05/02 Sat 22:46 PDT

usage="
Facilitates command-line use of the recoll full text search system.

USAGE      `basename $0` [-s] pattern ...

OPTIONS     -s enables stem expansion

SEE ALSO    recoll(1)
            /usr/share/recoll/doc/usermanual.html
    "

while getopts s option
do
        case "$option"
                in
                s) stems="yes";;
        esac
done

if [ "$#" -eq 0 ]
then
    echo "$usage"
    exit 0
fi

shift `expr $OPTIND - 1`

[ -e /tmp/recoll-search-terms ] && rm /tmp/recoll-search-terms

while [ "$#" -ne 0 ]
do
    if [ "$stems" = "yes" ]
    then
        if
            echo "$1" | grep ' '
        then
            echo -n "\"$1\" " >> /tmp/recoll-search-terms
        else
            echo -n "$1 " >> /tmp/recoll-search-terms
        fi
        shift
    else
        if
            echo "$1" | grep ' '
        then
            echo -n "\"$1\" " >> /tmp/recoll-search-terms
        else
            echo -n "$1 " |\
            sed y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/ \
            >> /tmp/recoll-search-terms
        fi
        shift
    fi
done

recoll -t `cat /tmp/recoll-search-terms` |\
sed -e s/^.*file:/file:/g -e s/[][]//g >| /tmp/recoll-search.txt

elinks -no-connect 1 /tmp/recoll-search.txt

exit 0



-- 
John Magolske
http://B79.net/contact


Reply to: