Я хочу, чтобы инструмент командной строки искал документы (включая документ, docx, odt) для строки, и ограничил результаты на основе шаблона имени файла, например, "поисковые буквы фортепьяно" для поиска текста "фортепьяно" в любом файле с "буквами" на его имя. Команда поиска средства отслеживания хороша, но возвращается, хиты на всем соответствии индексировали файлы, таким образом, я не вижу леса для деревьев. Мне нужно что-то более сфокусированное, и я не хочу должным быть реконфигурировать средство отслеживания путем изменения некоторого неясного файла установки каждый раз, когда я хочу искать. Если я искал текст ASCII, он был бы простой при помощи "grep-r каталог шаблона", но это не работает над современными документами слова.
Существует несколько вопросов на этом предмете (и многие отмеченные как дубликат), но ни один с удовлетворительным ответом (по крайней мере, для меня). Таким образом, я записал сценарий, названный "поиском", чтобы выполнить средство отслеживания и отфильтровать результаты на основе имен файлов, которые соответствуют данному шаблону. Используя "фортепьяно-l 1000 поиска средства отслеживания" я получаю 136 хитов, который включает слишком много шума. Используя "поисковые буквы фортепьяно" я получаю 4 хита, показывающие имена файлов (как активируемые по щелчку ссылки) сопровождаемый соответствующей текстовой строкой, которая является большой.
#! /bin/bash
#
# Use "tracker" to search files for content matching a pattern.
# (tracker indexes files by content, including text in MS Word documents.)
# Optionally filter on file pathnames matching another pattern.
#
# Synopsis:
# search content-pattern [path-pattern]
Usage="Usage: ${0##*/} content-pattern [path-pattern]"
case $# in
(1)
IfPathPattern=false
;;
(2)
IfPathPattern=true
;;
(*)
echo "$Usage" >&2
exit 2
;;
esac
tracker search -l 1000 "$1" |
if $IfPathPattern
then
awk -v pattern="$2" '
BEGIN {pattern=tolower(pattern)}
{text=tolower($0)}
lines>0 {print; lines--}
text~pattern {print; lines=2}'
else
cat
fi