Как использовать трекер для поиска документов по тексту, ограниченный шаблоном имени файла

Мне нужен инструмент командной строки для поиска документов (включая doc, docx, odt) по строке и ограничения результатов на основе шаблона имени файла, например, "поиск букв пианино" для поиска текста "фортепиано" в любом файле с буквами в названии. Команда поиска трекера хороша, но возвращает совпадения по всем соответствующим индексированным файлам, поэтому я не вижу дрова для деревьев. Мне нужно что-то более сфокусированное, и я не хочу перенастраивать трекер, изменяя какой-то непонятный файл настроек каждый раз, когда я хочу искать. Если бы я искал текст ASCII, это было бы просто, используя "каталог шаблонов grep -r", но это не работает на современных текстовых документах.

1 ответ

Решение

Есть несколько вопросов на эту тему (и многие отмечены как дубликаты), но ни один из них не имеет удовлетворительного ответа (по крайней мере, для меня). Поэтому я написал скрипт под названием "поиск" для запуска трекера и фильтрации результатов по именам файлов, которые соответствуют заданному шаблону. Используя "tracker search piano -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
Другие вопросы по тегам