我的目录中有多个 pdf 文件。我想利用一个 pdf 库将某些页面保存在一个新文件中,可能是一个单独的输出文件夹。
最好的方法是什么?
这是我编写的代码,但需要更多补充。
#!/bin/bash
# Saves 1st 4 pages or every pdf file to a new file.
for i in *.pdf; do
pdfcpu trim -pages "1-4" ${i}.pdf output ${i + %}.pdf
done
这段代码无法运行,但我已经达到了这个水平。我的问题,
- 如何迭代每个文件
- 仅将前 4 页保存在另一个文件夹中。
答案1
你很接近。
#! /bin/bash -
shopt -s nullglob
mkdir -p trimmed || exit
ret=0
for file in ./*.pdf; do
pdfcpu trim -pages 1-4 "$file" "trimmed/$file" || ret="$?"
done
exit "$ret"
- 使用 glob 时,最好使用前缀
./
来避免以-
. - 在 bash/sh 中,参数扩展必须加引号。
- 在 bash/sh 中,如果 glob 不匹配,则模式将按原样传递给命令。在 bash 中,您可以使用
shopt -s nullglob
(或failglob
使用不同的效果)解决该错误功能。 $i
在你的循环中包含完整的文件名,包括.pdf
扩展名。使用${i}.pdf
,您最终会得到两个扩展名,并且pdfcpu
无法找到相应的file.pdf.pdf
文件。${i + %}
没有任何意义。我不清楚你想以此实现什么目标。如果您希望$file
==的输出文件名file.pdf
是trimmed/file%.pdf
,则可以将其"trimmed/${file%.pdf}%.pdf"
作为输出文件路径传递。- 根据手册,你不应该在
output
那里。 - 记住要注意失败以及发生失败时该怎么做。在这里,如果任何
pdfcpu
命令失败,我们将继续执行其余命令,但我们会在脚本的退出状态中报告它们的失败。