특히 한 디렉터리에 있는 여러 epub/mobi 파일 세트에서 이를 수행할 수 있는 방법이 있습니까?
답변1
-a
파일을 ASCII로 해석하는 옵션을 제공하여 이러한 파일을 쉽게 grep 할 수 있습니다 .
grep -a "author" *.epub *.mobi
위의 방법은 1000개가 넘는 모든 EPUB 및 MOBI 파일에 적용되며 예상한 결과를 제공합니다.
EPUB와 MOBI는 모두 컨테이너 형식입니다. EPUB는 본질적으로 .zip
일부 구조적 요구 사항이 있는 파일이고 MOBI는 Palm 데이터베이스 형식 파일입니다. 두 형식 모두 압축되거나 압축되지 않은 데이터를 컨테이너에 넣을 수 있습니다.
찾고 있는 데이터가 컨테이너 내부의 "파일"에 있고 파일이 압축된 경우 다음을 제공해야 합니다.압축된 문자열문자열의 확장되고 압축되지 않은 버전이 아닙니다. 특히, 전자책 리더에서 EPUB/MOBI를 읽는 경우 일반적으로 grep -a 'abcde'
모든 EPUB 및 MOBI 파일에서 방금 읽은 "abcde"라는 단어를 사용 하지 않습니다. 이는 컨테이너의 "파일"을 압축하는 효율성을 측정하기 위한 것일 뿐입니다.
grep
이러한 파일 내에서 검색할 수 없다는 것은 문제 가 아닙니다 .너올바른 검색 문자열이 제공되지 않았습니다. 일본어-영어 번역 소프트웨어를 사용하여 일본어 텍스트가 포함된 파일을 읽은 다음 해당 파일을 찾으려는 경우에도 동일한 일이 발생합니다.영어 단어원본 파일을 grep하십시오. -a
올바른 일본어(이진) 단어 패턴을 사용하면 grep
정상적으로 작동합니다.
답변2
이것은 windows7+cygwin에서 작동하며 zip 아카이브 내의 텍스트를 검색합니다.
c:\> zipgrep "regex" file.epub
쉘 스크립트는 c:/cygwin/bin/zipgrep에 있으며 다음과 같이 작동합니다.
c:\> unzip -p "*.epub" | grep -a --color regex
-p 파이프의 경우.
grep-epub.sh 스크립트
PAT=${1:?"Usage: grep-epub PAT *.epub files to grep"}
shift
: ${1:?"Need epub files to grep"}
for i in $* ;do
echo $0 $i
unzip -p $i "*.htm*" "*.xml" "*.opf" | # unzip only html and content files to stdin
perl -lpe 's![<][^>]{1,200}?[>]!!g;' | # get rid of small html <b>tags
grep -Pinaso ".{0,60}$PAT.{0,60}" | # keep some context around matches
grep -Pi --color "$PAT" # color the matches.
done
답변3
epub 형식은 압축된 바이너리 파일이므로 텍스트를 구문 분석하기 전에 압축을 풀어야 합니다. MOBI 형식도 일반 텍스트가 아닌 것 같습니다. 따라서 epub 및 mobi 파일은 일반 텍스트 파일이 아니기 때문에 grep'될 수 없습니다. 파일 내에서 검색할 수 있는 구경이나 다른 리더를 사용하십시오.
답변4
이전 답변을 find와 결합할 수 있습니다.
find . -name "*.epub" -exec zipgrep pattern {} \;
이를 통해 모든 파일이 동일한 디렉토리 수준에 있을 필요 없이 디렉토리 트리 내에서 검색할 수 있습니다.