epubファイルを繰り返しgrepします。

epubファイルを繰り返しgrepします。

私は答えを試しましたここしかし、幸運はありません。

find . -name "*.epub" -exec zipgrep pattern {} \;

「一致」と表示されますが、一致するepubファイルを返しません。また、クエリが困難な大量のデータを返します。

grep -aまったく役に立ちません。

私はgrep -R似たようなものが欲しいが、epubファイルが欲しい。

答え1

これにより、すべての* .epubファイルのフルパスが提供されます。

find / -name *.epub -exec ls {} \; 2>/dev/null

その出力をリストに保存するには:

find / -name *.epub -exec ls {} \; 2>/dev/null >> /tmp/list

そのリストから文字列を取得するには、forループを使用します。大量のデータを取得すると、1つの長い行として処理できます。これにより、パターンの後に5文字が印刷されます。

for i in `cat /tmp/list` ; do echo $i ; grep -a -o -p '.{0,5}pattern.{0,5}' ; done

答え2

私は次を使うでしょう:

find . -name '*.epub'  -exec zipgrep -q {pattern} {} \; -print
  • -qヒット表示抑制
  • zipgrep一致するものが見つかった場合は0のみが返されるため、フィルタとして-exec zipgrep ...機能するため、-print一致するものが存在する場合にのみ実行されます(必要に応じて、-exec一致するファイルでのみ実行される他のものである可能性があります)。

関連情報