问题描述
我正在尝试让自动器合并具有相似名称的两个文件中的PDF页面。
现在我在automator中已经有一个服务工作流程,该工作流程能够合并两个选定的文件:
虽然此工作流程肯定有用,但我仍然必须手动选择要逐一合并的文件。另外,所产生的文件名将在设置的单词之后以明显随机的字母字符串重命名。
我将主要使用此脚本来获取编号文件(例如10989.pdf)与包含这些编号的文件合并,其名称为“ lst0090 10989 .pdf”。这些文件都位于一个文件夹中,其他各个文件的名称都遵循相同的系统,所以我需要的是工作流获取编号文件并将它们加入到各自的第一个文件中,然后在维护编号文件的同时将其复制到另一个文件夹中名称(在这种情况下为10989),然后对该文件夹中的其他文件执行相同的操作。
我该怎么做?
其他信息: 合并文件的第一页应始终是编号文件之一(示例中为10989)。第二个应该是LST文件之一。生成的文件应命名为NF_LST xxxxx.pdf(xxxx是编号文件的名称,在这种情况下为10989)。
第一个文件名始终以lst开头,并包含14个字符,最后一个字符始终与编号的文件名相同。编号的文件名从3个字符更改为6个字符。
解决方法
以下内容已在 macOS Catalina 10.15.4和10.15.5下进行了测试,在10.15.5下作为快速操作不适用于我。使用find
命令时,运行Shell脚本操作中似乎有一个 bug 。形成。它也可以在 macOS High Sierra 下运行,并且在三个测试环境中也可以作为 shell脚本使用。这进一步巩固了10.15.5中的 bug 假设。
这需要使用来自第三方的cpdf
免费Coherent PDF Command Line Tools Community Release-直接下载链接:Download pre-built cpdf tool
示例 bash脚本 代码:
for i in "$@"; do
[[ ${i} =~ .*/[0-9]{3,6}.*\.[pP][dD][fF] ]] || continue
j="$(find "${i%/*}" -type f -iname "lst*${i##*/}")"
[[ ${j} =~ .*/lst.*[0-9]{3,6}\.[pP][dD][fF] ]] || continue
l=${j##*/}
[[ ${#l} -eq 18 ]] || continue
/usr/local/bin/cpdf -merge "${i}" "${j}" -o "${i%/*}/FN_LST ${i##*/}"
done
根据代码,它执行以下操作:
- 检查传递的文件是3到6位数字,称为 PDF file 。
- 在相同的文件夹中找到相应的 PDF 文件,该文件以 lst 开头,并以相同的结尾3至6位数字,名为 PDF file 。
- 如果找不到对应的 PDF 文件,它将移至下一个文件。
- 验证找到的相应 PDF 文件的长度为18个字符,包括扩展名。
- 首先在新的合并后的 file 中将匹配集与名为 PDF file 的3至6位数字组合。
- 创建组合的文件,例如 FN_LST [0-9] {3,6} .pdf ,(FN_LST 10989.pdf),位于同一文件夹中,可以更改。
- 不覆盖现有的文件。
例如,要更改新合并的文件的创建位置。 /usr/local/bin/cpdf ...
行,将${i%/*}
更改为:
-o "${i%/*}/FN_LST ${i##*/}"
收件人:
-o "/path/to/FN_LST ${i##*/}"
/path/to
是完全限定目录路径名,例如:
-o "$HOME/Documents/Combined PDF Files/FN_LST ${i##*/}"
注意:/path/to
目录必须已经存在,因为没有错误处理,尽管也可以添加,例如:
d="HOME/Documents/Combined PDF Files"
[[ -d ${d} ]] || mkdir -p "${d}"
for i in "$@"; do
[[ ${i} =~ .*/[0-9]{3,6}\.[pP][dD][fF] ]] || continue
l=${j##*/}
[[ ${#l} -eq 18 ]] || continue
/usr/local/bin/cpdf -merge "${i}" "${j}" -o "${d}/FN_LST ${i##*/}"
done