如何编写Automator快速操作shell脚本实现despeck去水印及OCR功能
Despeck 批量处理Automator Shell脚本修复方案
原脚本错误原因
- 循环变量声明为
f,但代码中全程调用未定义的$FILE变量,参数为空导致执行时报“参数过多”错误 - 后缀名提取逻辑语法错误,无法正确识别文件扩展名
- 输出文件名拼接逻辑错误,会生成无效的命名格式
可用功能脚本
基础配置说明
Automator快速操作中,Shell选择/bin/bash,传递输入选择「作为自变量」即可使用以下脚本。
1. 批量去水印脚本
source ~/.bash_profile for f in "$@" do # 跳过目录,只处理文件 if [ -f "$f" ]; then echo "Removing Watermark: $f" # 提取文件扩展名 EXT="${f##*.}" # 提取无后缀的文件名路径 FILENAME_NO_EXT="${f%.*}" # 输出文件命名规则:原文件名_no_watermark.后缀 despeck remove "$f" -o "${FILENAME_NO_EXT}_no_watermark.${EXT}" fi done
2. 批量OCR识别脚本
source ~/.bash_profile for f in "$@" do if [ -f "$f" ]; then echo "Running OCR: $f" EXT="${f##*.}" FILENAME_NO_EXT="${f%.*}" # 输出OCR后的可检索PDF/图片 despeck ocr "$f" -o "${FILENAME_NO_EXT}_ocr.${EXT}" fi done
3. 批量PDF文本提取脚本
source ~/.bash_profile for f in "$@" do if [ -f "$f" ] && [ "${f##*.}" = "pdf" ]; then echo "Extracting PDF Text: $f" FILENAME_NO_EXT="${f%.*}" # 输出txt格式文本文件 despeck extract "$f" -o "${FILENAME_NO_EXT}_text.txt" fi done
合并功能脚本(单脚本一次完成三个操作)
如果需要单脚本一次性完成去水印+OCR+文本提取(仅对PDF生效),可以使用以下整合版本:
source ~/.bash_profile for f in "$@" do if [ ! -f "$f" ]; then continue fi EXT="${f##*.}" FILENAME_NO_EXT="${f%.*}" # 通用去水印 despeck remove "$f" -o "${FILENAME_NO_EXT}_no_watermark.${EXT}" # 通用OCR despeck ocr "${FILENAME_NO_EXT}_no_watermark.${EXT}" -o "${FILENAME_NO_EXT}_processed.${EXT}" # 仅PDF额外提取文本 if [ "$EXT" = "pdf" ]; then despeck extract "${FILENAME_NO_EXT}_processed.pdf" -o "${FILENAME_NO_EXT}_text.txt" fi done
内容的提问来源于stack exchange,提问作者Husnain Sajid
相关产品推荐
相关产品推荐

