PDF에서 텍스트를 검색하기 위해 온라인에서 다음 명령을 찾았습니다.
find . -name '*.pdf' -exec sh -c 'pdftotext "{}" - | grep --with-filename --label="{}" --color "your pattern"' \;
스크립트를 통해 자동화하고 싶어서 스크립트 파일 search_pdf.sh에 작성했습니다.
#!/bin/bash
echo $1
find . -name '*.pdf' -exec sh -c 'pdftotext "{}" - | grep --with-filename --label="{}" --color "$1"' \;
스크립트에 몇 가지 버그가 있어 예상대로 작동하지 않습니다. 누구든지 나를 도와줄 수 있나요?
답변1
$1
스크립트를 내보내보세요 .
#!/usr/bin/env bash
pattern=$1
export pattern
find . -name '*.pdf' -exec sh -c 'pdftotext "{}" - | grep --with-filename --label="{}" --color "$pattern"' \;
그러나 나는 그것을 다음과 같이 다시 작성하는 것이 좋습니다
#!/usr/bin/env bash
pattern=$1
export pattern
find . -name '*.pdf' -exec sh -c 'for f; do
pdftotext "$f" - | grep --with-filename --color "$pattern"
done' _ {} +
아마도 추가 할 --label=$pattern
수도 있습니다
답변2
$0
오류 메시지의 셸 이름과 위치 인수로 호출 $1
에 인수를 전달해야 합니다 sh -c '...'
.
#!/bin/bash
find . -name '*.pdf' -exec sh -c '
pdftotext "{}" - | grep --with-filename --label="{}" --color "$1"
' sh "$1" \;
여기서는 (어떤 이름이든 sh
가능 $0
) 원래 인수가 "$1"
위치 인수로 전달됩니다 $1
.
설치 한 경우 pdfgrep
PDF를 텍스트로 변환하거나 추가 셸이 필요하지 않습니다.
find . -name '*.pdf' -exec pdfgrep -H "$1" {} \;