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 루프를 사용합니다. 많은 양의 데이터를 얻으면 하나의 긴 행으로 처리할 수 있습니다. 그러면 패턴 뒤에 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일치하는 파일에서만 실행되는 다른 항목일 수 있습니다).

관련 정보