对于文件夹中的每个文件pdf
,我都有 3 个与之相关的文件。
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
、original.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}'
}
要将名称应用于文件夹中不包含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