Shell-Script

用於比較更新的 pdf 的 Bash 腳本

  • August 15, 2022

對於pdf我在一個文件夾中的每個文件,我都有 3 個與之相關的文件。

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

現在我需要一個可以執行以下操作的腳本:

  1. 檢查是否original.pdforiginal_roc_mrc_updated.pdf有相同的頁數。
  2. 檢查original_roc_mrc.pdf大小是否最多比大 20%original_roc_mrc_updated.pdf
  3. 如果前面的為真,則 刪除original.pdf和。如果 1) 或 2) 為假,則對“pack”不執行任何操作original.txt``original_roc_mrc.pdf

我沒有安裝 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

引用自:https://unix.stackexchange.com/questions/713607