업데이트된 PDF를 비교하는 Bash 스크립트

업데이트된 PDF를 비교하는 Bash 스크립트

폴더의 각 파일에는 pdf관련 파일이 3개 있습니다.

original.pdf
original.txt
original_roc_mrc.pdf
original_roc_mrc_updated.pdf

이제 다음을 수행하는 스크립트가 필요합니다.

  1. 페이지 수가 동일한 original.pdf지 확인하세요 .original_roc_mrc_updated.pdf

  2. original_roc_mrc.pdf크기가 최대 20% 더 큰지 확인하세요 .original_roc_mrc_updated.pdf

  3. 이전 내용이 true인 경우 , original.pdforiginal.txt을 삭제합니다 original_roc_mrc.pdf. 1) 또는 2)가 거짓인 경우 "pack"에 대해 아무것도 수행하지 마십시오.

답변1

pdftk가 설치되어 있지 않고 필요한 모든 Java 항목을 설치하고 싶지 않으므로 여기에 poppler-util의 pdfinfo를 사용하여 페이지 수를 가져온 다음 나머지 작업을 수행하는 스크립트가 있습니다.

#!/usr/bin/env bash

# function to get filesize
filesize() {
    stat -c '%s' "$1"
}

# function to get number of pages
numpages() {
    pdfinfo "$1" | sed -n 's/^Pages:\s*\([0-9]*\)\s*/\1/p'
}

# get number of pages for these two files
pages1="$(numpages original.pdf)"
pages2="$(numpages original_roc_mrc_updated.pdf)"

# get filesizes of these two files
size1="$(filesize original_roc_mrc_updated.pdf)"
size2="$(filesize original_roc_mrc.pdf)"

# determine the maxfilesize to be 20% larger or less
# 120% = the original size plus 1/5th of original size
maxsize=$(( size1 + size1/5 ))

# see if pages1=pages2 and size2 <= maxsize
if [[ pages1 -eq pages2 ]] &&
    [[ size2 -le maxsize ]] ; then
    rm original.pdf original.txt original_roc_mrc.pdf
fi

어떤 이유로 pdftk를 사용하려는 경우 해당 기능을 다음으로 바꿀 수 있습니다.

numpages() {
    pdftk "$1" dump_data | grep NumberOfPages | awk '{print $2}'
}

이름이 포함되지 않은 폴더의 모든 .pdf에 이름을 적용하려면 mrc다음과 같은 루프를 사용할 수 있습니다(질문 편집에서 동일한 코드 대부분 사용).

#!/usr/bin/env bash

# function to get filesize
filesize() {
    stat -c '%s' "$1"
}

# function to get number of pages
numpages() {
    pdfinfo "$1" | sed -n 's/^Pages:\s*\([0-9]*\)\s*/\1/p'
}


for filename in *.pdf ; do

    # skip files with "mrc" in their name
    if [[ "$filename" =~ "mrc" ]] ; then
        continue
    fi

    # determine common part of filenames
    commonname="${filename%.pdf}"
    
    # get number of pages for these two files
    pages1="$(numpages "$filename")"
    pages2="$(numpages "${commonname}_roc_mrc_updated.pdf")"

    # get filesizes of these two files
    size1="$(filesize "${commonname}_roc_mrc_updated.pdf")"
    size2="$(filesize "${commonname}_roc_mrc.pdf")"

    # determine the maxfilesize to be 20% larger or less
    # 120% = the original size plus 1/5th of original size
    maxsize=$(( size1 + size1/5 ))

    if [[ pages1 -eq pages2 ]] &&
        [[ size2 -le maxsize ]] ; then
        rm "$filename" "${commonname}.txt" "${commonname}_roc_mrc.pdf"
    fi
done

관련 정보