Shell-Script
用於比較更新的 pdf 的 Bash 腳本
對於
original.pdf original.txt original_roc_mrc.pdf original_roc_mrc_updated.pdf
現在我需要一個可以執行以下操作的腳本:
- 檢查是否
original.pdf
和original_roc_mrc_updated.pdf
有相同的頁數。- 檢查
original_roc_mrc.pdf
大小是否最多比大 20%original_roc_mrc_updated.pdf
- 如果前面的為真,則 刪除
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