많은 pdf 파일에서 문구를 검색하는 명령 줄 도구


9

Opensuse 10.3을 사용하고 디렉토리 내의 많은 pdf 파일에서 문구를 검색하는 명령 줄 도구를 알고 싶습니다. Windows XP의 경우 탐색기 검색에서이를 허용하지만 너무 느립니다. 그렙 팁이 있습니까?



명령 줄 도구를 먼저 알고 싶습니다 .GUI 도구가 있으면 좋을 것입니다 .Wingrep은 Windows에서만 사용할 수 있습니다. 그리고 나는 그 최적화 된 응용 프로그램이 좋은 것, 그래서 가지고 만 PDF 파일을 검색 할
아이스 맨

답변:


6
SEARCH_DIR = "/ some / dir / where / you / want / to / search /";
SEARCH_STRING = "무엇이든 검색 중";
# pdf에서 텍스트 추출
pdftotext "file.pdf" "file.txt"

# grep과 연결
pdftotext "file.pdf"/ dev / stdout | grep -H --label = "file.pdf"- "$ SEARCH_STRING"

# grep이 일치하는 pdf 파일의 파일 목록 만 표시하도록하려면 --files-with-matches를 추가하십시오.
pdftotext "file.pdf"/ dev / stdout | grep -H --label = "file.pdf"-일치하는 파일- "$ SEARCH_STRING"

# 검색 가능한 PDF 목록을 찾으십시오.
"$ SEARCH_DIR"찾기 -type f -name '* .pdf'> list-of-pdf.txt
# awk와 덕트 테이프로 결합 된 모든 것, 처리를 위해 bash로 전송
# 큰 따옴표는 awk 내부 x22로 이스케이프됩니다.
"$ SEARCH_DIR"찾기 -type f -name '* .pdf'| awk -v SEARCH_STRING = "$ SEARCH_STRING" '{
"pdftotext \ x22"$ 0 "\ x22 / dev / stdout | grep -H --label = \ x22"$ 0 "\ x22-\ x22"SEARCH_STRING "\ x22"인쇄
} '| bash

# bash없이. 필요에 맞는 추가 프로세스
"$ SEARCH_DIR"찾기 -type f -name '* .pdf'| awk -v SEARCH_STRING = "$ SEARCH_STRING" '
{
EXEC = "pdftotext \ x22"$ 0 "\ x22 / dev / stdout | grep -H --label = \ x22"$ 0 "\ x22-\ x22"SEARCH_STRING "\ x22";
while (EXEC | getline ret) {
 print "파일 ["$ 0 "]의 경우 ["ret "]"와 일치합니다.
 # 원하는대로하세요. 
};
닫기 (EXEC);
} '

“Windows XP” 또는 windows-search 태그 를 언급 한 질문의 일부를 보지 못했다고 생각합니다 . 나는 “openSUSE”로 시작된 질문을 혼동하지만 알고 있지만 Linux 참조보다 더 많은 Windows 참조가 있습니다. 특히 당신이 그의 후속 의견 을 세는 경우 .
Synetech

@Synetech : 그는 "Wingrep is only only Windows"에 대한 답변을 거부했으며, 이는 Linux 솔루션을 원한다고 제안합니다.
기계 달팽이

@ Mechanicalsnail은 명령 줄 도구를 요청한 GUI 도구이기 때문에 거부했습니다.
Synetech

3

Linux 및 Windows 모두에서 여러 파일을 검색하는 명령이있는 Acrobat Reader를 사용할 수 있습니다.

Linux에는 Recoll이 있으며, 처음 실행할 때 pdf 파일의 색인을 작성합니다. 색인이 작성되면 단어 검색이 매우 빨라야합니다. 구문 검색은 합리적이어야합니다. pdftotextRecoll을 시작하기 전에 명령이 설치되어 있는지 확인하십시오 . 데비안과 우분투에서 poppler-utils패키지에 들어 있습니다. 수세에 대해서는 모르겠습니다.

또는 파일을 텍스트로 직접 변환하고 아래 명령으로 텍스트 파일에 grep을 사용할 수 있습니다.

찾기 -name '* .pdf'-exec pdftotext {} \;
grep -r --include '* .txt'-l -F "검색 할 정확한 구"
grep -r --include '* .txt'-l -E "검색 할 정규식"

Adobe는 전체 디렉토리에서 검색 할 수 없으며 파일 내부에서만 검색 할 수 있습니다. 커맨드 라인 도구를 먼저 알고 싶습니다. GUI 도구가 있다면 그것도 좋을 것입니다
iceman

Linux의 Adobe Reader 9에는 디렉토리의 모든 PDF 파일을 검색 할 수있는 "편집 | 검색"메뉴 항목이 있습니다. 커맨드 라인에서 내가 알고있는 모든 방법에는 단계가 포함 pdftotext됩니다 (Recoll과 같은 도구는 자동으로 수행됩니다).
Gilles 'SO- 악마 그만해'

1
리콜 +1 파일을 많이 인덱싱하고 자주 검색하면 파일을 인덱싱하면 시간이 절약됩니다.
기계 달팽이

1

어도비 리더 X는 작업을 수행하고 그것을 수행 뿐만 아니라 파일 내부에, 전체 디렉토리 및 하위 디렉토리에서 검색을 허용하지만 명령 줄 프로그램이 아닙니다.


최신 버전의 Acrobat X입니까? 어느 릴리스?
iceman

Acrobat 인덱싱 도구를 사용해 보았고 프리미티브라고 부릅니다. recollWindows 기반 직원이 사용할 수 있도록 데비안에 쉽게 설치되었습니다.
Chris K

0

PDF 파일 확장자를 가지며 정규 표현식 ' [iI]n Haskell' 과 일치하는 행을 포함하는 홈 디렉토리의 모든 파일을 재귀 적으로 나열하려면 다음을 발행하십시오.

find ~/ -regextype posix-extended -regex '.*\.pdf' -execdir sh -c 'pdftotext "$0" - | grep -El --label="$PWD${0#?}" "$1"' {} '[iI]n Haskell' \;

비고 :

  • 이 예에 특히 필요는 없습니다 만, 내가 사용 방지이 건설 한 -execxargs때문에 보안상의 이유로 , 나는 그것의 좋은 연습은 그렇게하는 습관을 얻을 수 있다고 생각합니다. ' -execdir'에서 ' -exec'및 ' $PWD${0#?}'에서 ' '를 변경하면 $0이 인스턴스에서 동일한 결과를 얻을 수 있습니다.
  • 파일 이름을 패턴 일치하는 데 glob 을 사용하는 대신 정규 표현식의 표현력을 높이고 전체 경로를 패턴 일치하는 것이 유용 할 수 있습니다 . 나는 그것을 수행하는 방법을 보여주기 위해 연습을 여기에 포함시켰다. 패턴과 일치하는 경로는 일반적으로 인쇄되는 경로입니다. 상대 경로인지 절대 경로인지는 주어진 경로 인수에 따라 달라지며, 기본 경로는 현재 작업 디렉토리 ( ' ./')로 내 보냅니다. 이 예에서, /' ~/'가 현재 사용자의 홈 디렉토리의 절대 경로로 확장되고 유일한 경로 인수 이므로 일치하는 경로는 모두 절대입니다 (예 : ' '로 시작 ) 입니다.
  • ' $0'및 ' $1'는 인수를 올바르게 인용하는 방식으로 사용되는 위치 매개 변수입니다. 이를 제대로 수행하지 않으면 명령이 임의의 파일 이름에 취약합니다.
  • ' ${0#?}'의 첫 번째 문자 스트립 $0, IE의 '을 .'.

파일 이름에 따라 일치하는 각 줄을 인쇄하려면

find ~/ -regextype posix-extended -regex '.*\.pdf' -execdir bash -c 'pdftotext "$0" - | grep -EH --label="${0:2}" "$1"' {} '[iI]n Haskell' \;

이 변형은 ' -H'대신 ' '를 사용 -l하고 파일 경로가 아닌 파일 이름을 가진 레이블을 사용합니다. ' ${0:2}'는 ' '의 첫 두 문자 $0, 즉 ' ./'를 제거하지만 분명히 인식하지 못합니다 sh.

물론 필요에 따라 조정하십시오.

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