用于比较更新的 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. 如果前面的为真,则删除 original.pdforiginal.txtoriginal_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}'
}

要将名称应用于文件夹中不包含mrc其名称的所有 .pdf,您可以使用这样的循环(使用问题编辑中的大部分相同代码):

#!/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

相关内容