私は答えを試しましたここしかし、幸運はありません。
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
一致するファイルでのみ実行される他のものである可能性があります)。