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

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

1
задан 20 June 2018 в 13:35

1 ответ

Существует несколько вопросов на этом предмете (и многие отмеченные как дубликат), но ни один с удовлетворительным ответом (по крайней мере, для меня). Таким образом, я записал сценарий, названный "поиском", чтобы выполнить средство отслеживания и отфильтровать результаты на основе имен файлов, которые соответствуют данному шаблону. Используя "фортепьяно-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
2
ответ дан 7 December 2019 в 13:23

Другие вопросы по тегам:

Похожие вопросы: