Opensuse 10.3을 사용하고 디렉토리 내의 많은 pdf 파일에서 문구를 검색하는 명령 줄 도구를 알고 싶습니다. Windows XP의 경우 탐색기 검색에서이를 허용하지만 너무 느립니다. 그렙 팁이 있습니까?
답변
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); } '
답변
Linux 및 Windows 모두에서 여러 파일을 검색하는 명령이있는 Acrobat Reader를 사용할 수 있습니다.
Linux에는 Recoll이 있으며, 처음 실행할 때 pdf 파일의 색인을 작성합니다. 색인이 작성되면 단어 검색이 매우 빨라야합니다. 구문 검색은 합리적이어야합니다. pdftotext
Recoll을 시작하기 전에 명령이 설치되어 있는지 확인하십시오 . 데비안과 우분투에서 poppler-utils
패키지에 들어 있습니다. 수세에 대해서는 모르겠습니다.
또는 파일을 텍스트로 직접 변환하고 아래 명령으로 텍스트 파일에 grep을 사용할 수 있습니다.
찾기 -name '* .pdf'-exec pdftotext {} \; grep -r --include '* .txt'-l -F "검색 할 정확한 구" grep -r --include '* .txt'-l -E "검색 할 정규식"
답변
어도비 리더 X는 작업을 수행하고 그것을 수행 뿐만 아니라 파일 내부에, 전체 디렉토리 및 하위 디렉토리에서 검색을 허용하지만 명령 줄 프로그램이 아닙니다.
답변
PDF 파일 확장자를 가지며 정규 표현식 ‘ [iI]n Haskell
‘ 과 일치하는 행을 포함하는 홈 디렉토리의 모든 파일을 재귀 적으로 나열하려면 다음을 발행하십시오.
find ~/ -regextype posix-extended -regex '.*\.pdf' -execdir sh -c 'pdftotext "$0" - | grep -El --label="$PWD${0#?}" "$1"' {} '[iI]n Haskell' \;
비고 :
- 이 예에 특히 필요는 없습니다 만, 내가 사용 방지이 건설 한
-exec
나xargs
때문에 보안상의 이유로 , 나는 그것의 좋은 연습은 그렇게하는 습관을 얻을 수 있다고 생각합니다. ‘-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
.
물론 필요에 따라 조정하십시오.