Linux에서 명령 행을 사용하여 PDF 파일이 손상되었는지 확인


16

하나의 폴더에 많은 PDF 파일이 있습니다.

명령 줄을 사용하여 파일을 하나씩 열지 않고도 하나 이상의 파일이 손상되었는지 (제로 페이지 또는 완료되지 않은 다운로드) 확인할 수 있습니까?

답변:


20

아마도 패키지의 pdfinfoFedora에서 실행 poppler-utils하면 실마리가 생길까요?

PDF 파일에있는 대부분의 정보는 끝에있는 사전에 있으므로 찾은 경우 정상입니다. 나는 다음과 같은 것을 할 것이다 :

for f in *.pdf; do
  if pdfinfo "$f" > /dev/null; then
    : Nothing
  else
    echo "$f" is broken
  fi
done

6
pdfinfo를 pdftotext로 바꾸는 것이 좋습니다. 이렇게하면 모든 페이지의 모든 텍스트가 검사됩니다. 그리고 gt 문자는 모든 오류 메시지가 표시되지 않도록 &>이어야합니다.
schoetbi

내 모든 PDF가 깨진 것으로 표시됩니다. 수백 기가 바이트 방금 만든 것을 포함합니다. 사용 여부 pdfinfo또는 pdftotext...
PatrickT

13

이것은 내 스크립트입니다

find . -iname '*.pdf' | while read -r f
  do
    if pdftotext "$f" &> /dev/null; then 
        echo "$f" was ok;   
    else
        mv "$f" "$f.broken";
        echo "$f" is broken;   
    fi; 
done

명확히하려면 :이 스크립트는 .broken을 .pdf 확장자에 추가하여 '깨진'것으로 진단 된 pdf 파일의 이름을 바꿉니다.
PatrickT

5

PDF 확인을위한 나의 선택 도구는 qpdf입니다. PDF에서 문제를 찾는 데 도움 qpdf이되는 --check주장이 있습니다.

다음을 사용하여 단일 PDF를 확인하십시오 qpdf.

qpdf --check test_file.pdf

다음 디렉토리를 사용하여 디렉토리의 모든 PDF를 확인하십시오 qpdf.

find ./directory_to_scan/ -type f -iname '*.pdf' \( -exec sh -c 'qpdf --check "{}" > /dev/null && echo "{}": OK' \; -o -exec echo "{}": FAILED \; \)

명령 설명 :

  • find ./directory_to_scan/ -type f -iname '*.pdf' 확장자가 '.pdf'인 모든 파일 찾기

  • -exec sh -c 'qpdf --check "{}" > /dev/null && echo "{}": OK' \;qpdf찾은 각 파일에 대해 실행 하고 모든 출력을로 파이프하십시오 /dev/null. 또한 반환 상태 qpdf가 0 인 경우 (예 : 오류 없음) 파일 이름 뒤에 ': OK'를 인쇄합니다.

  • -o -exec echo "{}": FAILED \; \) 오류가 발견되면 실행됩니다. 파일 이름 인쇄 후 ": FAILED"


입수 처 qpdf:

qpdfhttps://github.com/qpdf/qpdf/releases 에서 Linux 및 Windows 바이너리를 모두 사용할 수 있습니다 . 선택한 패키지 관리자를 사용하여 얻을 수도 있습니다. 예를 들어 Ubuntu에서 다음 명령과 함께 apt를 사용하여 qpdf를 설치할 수 있습니다.

apt install qpdf

그러나 qpdf --check여러 도구에서 다르게 처리하므로 잘못 정의 된 메타 데이터를 감지하지 못합니다. 버그를 신고했습니다 . 같은 다른 도구 pdfinfopdftk안 중 하나지만, 그들은 PDF 구조를 확인하기 위해 주장하지 않습니다.
vinc17


2

나를 사용 pdfinfo하거나 사용 pdftotext하지 않은 모든 방법 . 사실 그들은 계속 오탐 (false positive)을 받았고 때로는 필요하지 않은 파일을 만들었습니다.

일한 것은 JHOVE였습니다 .

설치:

위 링크에서 jar을 설치하고 다음 명령으로 PATH 환경 변수를 업데이트하십시오.

echo "export PATH=\$PATH:/REPLACE_WITH/YOUR/PATH_TO/jhove/" >> ~/.bash_profile

각 터미널을 새로 고치면 source ~/.bash_profile시스템 전체에서 사용하는 것이 좋습니다.

기본 사용법 :

jhove -m pdf-hul someFile.pdf

대부분의 사람들이 필요로하는 것보다 더 많은 pdf에 대한 많은 정보를 얻을 수 있습니다.

배쉬 한 - 라이너 :
간단하게 반환 valid또는 invalid:

if [[ $(jhove -m pdf-hul someFile.pdf | grep -a "Status:") == *"Well-Formed and valid"* ]]; then echo "valid"; else echo "invalid"; fi;

이것은 Mac OS X에서 실행되었지만 모든 Unix 기반 Bash 환경과 동일하게 작동한다고 가정합니다.

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