여러 pdf 파일의 내용을 검색하는 방법?


226

디렉토리 / 하위 디렉토리에서 PDF 파일의 내용을 어떻게 검색 할 수 있습니까? 몇 가지 명령 줄 도구를 찾고 있습니다. grepPDF 파일을 검색 할 수없는 것 같습니다 .


5
PDF는 이진 형식이므로 텍스트는 종종 다양한 방식으로 압축 또는 인코딩되므로 Grep이 작동하지 않습니다.
마크 스티븐스

4
다음은 GUI 솔루션입니다. Adobe Reader, wikispaces.psu.edu/display/training/…
Martin Thoma


3
Adobe Reader는 제대로 작동하지만 색인을 생성하지는 않습니다. 파일이 많으면 속도가 느려집니다. 인덱싱 솔루션이 있습니까?
Ruby

답변:


211

배포판에는 pdftotext다음과 같은 유틸리티가 있어야합니다 .

find /path -name '*.pdf' -exec sh -c 'pdftotext "{}" - | grep --with-filename --label="{}" --color "your pattern"' \;

"-"는 pdftotext를 파일이 아닌 stdout에 출력해야합니다. --with-filename--label=옵션은 GREP의 출력에 파일 이름을 넣어 것입니다. 옵션--color 플래그는 좋고 터미널에서 색상을 사용하여 출력하도록 grep에 지시합니다.

(우분투에서는 pdftotext패키지 xpdf-utils또는에서 제공됩니다 poppler-utils.)

이 방법을 사용 pdftotext하고 grep,보다 이점이있다 pdfgrep당신이 GNU의 기능을 사용하려면 지원하지 않습니다. 참고 : pdfgrep-1.3.x는 상황에 맞는 인쇄 옵션을 지원합니다 .greppdfgrep-C


1
@Kurt Pfeifle grep인쇄 된 파일 이름을 필터링하므로 편집 한 "(Edit by -kp-)"편집 기능이 작동하지 않습니다 .
Raphael Ahrens

@ sjr 아니오, pdfgrep솔루션은 정말 빠르고 간단한 검색에 적합하지만 한 줄로도 도움이되지 않으므로 문맥을 얻고 싶을 때가 있습니다. "당신의 패턴"전에-C5 옵션은 출력 컨텍스트의 5 개 행을 포함하는 - pdfgrep이 지원하지 않습니다
콜린 D 베넷

아, 근사하고, 이것으로 이점이 있다는 것을 알게되어 기쁘다. 비록 그것이하고있는 대부분의 사람들에게는 그다지 명백하지 않다
sjr

2
@sjr 단지 기록을 위해 : 나는 Ubuntu 12.10을 사용하고 pdfgrep있으며 쓸모가 없으며 처리 할 수없는 파일에 엄청난 양의 쓰레기를보고합니다. 반면에 귀하의 솔루션이 도움이되었습니다. 3 년이 지난 후에도 삭제해도 도움이되지 않습니다.
알리

cygwin에서도 사용할 수있었습니다. "your_pattern"을 '$ 1'로 만들어야하는 매개 변수를 사용하여 함수로 만들 수는 있습니다.
Koshmaar

214

pdfgrep있는데 , 이름에서 알 수있는 것과 정확히 일치합니다.

pdfgrep -R 'a pattern to search recursively from path' /some/path

간단한 검색에 사용했으며 정상적으로 작동했습니다.

(데비안, 우분투 및 페도라에는 패키지가 있습니다.)

버전 1.3.0부터 pdfgrep 는 재귀 검색을 지원합니다. 이 버전은 Ubuntu 12.10 (Quantal)부터 Ubuntu에서 사용할 수 있습니다.


1
Natty (Ubuntu 11.04) 이상 ( packages.ubuntu.com/… 참조 )
Martin Thoma

2
@pavon pdfgrep은 이제 -R심볼릭 링크를 포함한 재귀 옵션을 가지고 있습니다
Tobias Kienzler

30

리콜 은 PDF를 포함하여 수십 가지 형식을 지원하는 Unix / Linux 용 환상적인 전체 텍스트 GUI 검색 응용 프로그램입니다. 쿼리의 정확한 페이지 번호와 검색어를 문서 뷰어로 전달할 수 있으므로 GUI에서 결과로 바로 이동할 수 있습니다.

Recoll은 또한 실행 가능한 명령 행 인터페이스 및 웹 브라우저 인터페이스 와 함께 제공 됩니다.


1
@Glutanimate 원래 질문 (여러 PDF를 검색하기위한 명령 줄 도구)과 관련된 예제를 추가 할 수 있다면 도움이 될 것입니다 (나와 다른 사람들도 ) : 와일드 카드 검색 을 수행하는 방법과 검색 방법을보고 싶습니다 모든 하위 디렉토리를 포함하여 현재 디렉토리 . 어떻게 것와 표정 recoll / xapian명령 줄 (비 GUI)에? 감사!
natty에 대해 nutty

@ LeszekŻarna 아마도 테스트 한 예제를 게시 할 수 있습니까?
natty에 대해 nutty

recoll 사용자 설명서는 ... 몇 가지 포인터를 포함 할 수 있지만 이벤트는 오히려 기술과는 "오프 주제"읽기
열매를 단정 대해

1
@nutty : recoll -t -q dir : pwdext : pdf 'neuro *'-pwd 주위의 백틱을 먹었습니다.
medoc

13

pdfgrep (1.3.0)의 실제 버전은 다음을 허용합니다.

pdfgrep -HiR 'pattern' /path

할 때 pdfgrep --help:

  • H : 각 일치에 대한 파일 이름을 인쇄하십시오.
  • i : 대소 문자 구분을 무시하십시오.
  • R : 디렉토리를 재귀 적으로 검색합니다.

우분투에서 잘 작동합니다.


7

나는이 파괴적인 작은 스크립트를 만들었습니다 . 그것으로 재미있게 보내십시오.

function pdfsearch()
{
    find . -iname '*.pdf' | while read filename
    do
        #echo -e "\033[34;1m// === PDF Document:\033[33;1m $filename\033[0m"
        pdftotext -q -enc ASCII7 "$filename" "$filename."; grep -s -H --color=always -i $1 "$filename."
        # remove it!  rm -f "$filename."
    done
}

2
+1. 그러나 대신 $filename.에을 파이프해야합니다 grep.
Raphael Ahrens

3

나는 @ sjr의 대답을 좋아하지만 xargs 대 -exec를 선호합니다. 나는 xargs가 더 다재다능하다는 것을 안다. 예를 들어 -P를 사용하면 여러 CPU를 사용할 수 있습니다.

find . -name '*.pdf' | xargs -P 5 -I % pdftotext % - | grep --with-filename --label="{}" --color "pattern"

xargs'병렬 처리 기능 에 대한 흥미로운 점 . 당신의 것을 참고 --label옵션 인수가 없을 것 그대로 {} 때문에, grep명령이 이제 더 이상의 컨텍스트에서 실행되는 findexec.
mklement0

2

동일한 문제가 발생하여 지정된 폴더의 모든 pdf 파일에서 문자열을 검색하고 쿼리 문자열과 일치하는 PDF 파일을 인쇄하는 스크립트를 작성했습니다.

아마도 이것은 당신에게 도움이 될 것입니다.

여기에서 다운로드 할 수 있습니다


주석에 스크립트를 넣는 것이 유용할까요?
baxx

나는 당신의 스크립트를 시도했고 그것은 pdfgrep솔루션이나 sjr의 one-liner 보다 훨씬 느리다는 것을 알았으며, Ctrl-C를 종료 한 후에도 100 % CPU 스레드를 사용하는 진행중인 프로세스로 나를 떠났습니다.
Jason

2

pdftotext로 파일 이름을 보려면 다음 명령을 사용 하십시오 .

find . -name '*.pdf' -exec echo {} \; -exec pdftotext {} - \; | grep "pattern\|pdf" 

2

라는 또 다른 유틸리티가 ripgrep 모두 를 기반으로, ripgrep은 .

Office 문서 및 영화와 같은 단순한 PDF 문서 이상을 처리 할 수 ​​있으며 저자 문서 보다 빠릅니다.pdfgrep .

현재 디렉토리를 재귀 적으로 검색하기위한 명령 구문이며 두 번째 디렉토리는 PDF 파일로만 제한됩니다.

rga 'pattern' .
rga --type pdf 'pattern' .

1

오픈 소스 공통 자원 grep 도구 crgrep가 있습니다PDF 파일 내에서 검색하는 아카이브, 데이터베이스 테이블, 이미지 메타 데이터, POM 파일 종속성 및 웹 자원과 같은 다른 자원과 재귀 검색을 포함한 이러한 자원의 조합을 검색 이 있습니다.

파일 탭 아래의 전체 설명은 도구가 지원하는 내용을 거의 다룹니다.

저는 오픈 소스 도구로 crgrep을 개발했습니다.


크레이그-그 프로젝트에 연결되어 있습니까? 그렇다면 답변에 기재해야합니다. 나는 당신이 방금 다른 두 가지 질문에 대해 거의 동일한 답변을 게시했기 때문에 이것을 말합니다.
Stephen C

내가 crgrep의 저자임을 명확히하기 위해 게시물을 업데이트했습니다
Craig

1

먼저 모든 PDF 파일을 텍스트 파일로 변환하십시오.

for file in *.pdf;do pdftotext "$file"; done

그런 다음 grep정상적으로 사용하십시오 . 여러 개의 쿼리와 많은 PDF 파일이있을 때 빠르기 때문에 특히 좋습니다.


ag github.com/ggreer/the_silver_searcher 와 함께 사용 하면 됩니다. 사이키델릭 Gb에서 마이크로 초 단위로 구문 분석 할 수 있습니다. 평생 플랫 파일
NVRM

0

먼저 pdf를 텍스트 파일로 변환 한 다음 텍스트 내부를 검색하려면 pdf2text와 같은 도구가 필요합니다. (아마도 일부 정보 나 기호가 누락 될 수 있습니다).

프로그래밍 언어를 사용하는 경우이 목적으로 작성된 pdf 라이브러리가있을 수 있습니다. 예 : Perl의 경우 http://search.cpan.org/dist/CAM-PDF/


0

위와 같은 간단한 스크립트에서 'acroread'를 사용해보십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.