コマンドラインツールでドキュメント(doc、docx、odtを含む)で文字列を検索し、ファイル名のパターンに基づいて結果を制限します。たとえば、「ピアノの文字を検索」で任意のファイルの「ピアノ」というテキストを検索します。名前に「文字」が含まれています。トラッカー検索コマンドは優れていますが、一致するすべてのインデックスファイルでヒットを返すため、ツリーのウッドが表示されません。もっと焦点を絞ったものが必要で、検索するたびにあいまいな設定ファイルを変更してトラッカーを再構成する必要はありません。 ASCII textを検索した場合、「grep -r pattern directory」を使用すると簡単になりますが、これは最新のWord文書では機能しません。
この問題にはいくつかの質問があります(多くは重複としてマークされています)が、満足のいく答えはありません(少なくとも私にとって)。そこで、トラッカーを実行し、特定のパターンに一致するファイル名に基づいて結果をフィルタリングする「検索」というスクリプトを作成しました。 「トラッカーサーチピアノ-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