You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu监控PDF目录自动合并脚本故障及批量触发问题求助

问题与修复方案

需求说明

  • 创建目录并监控其中PDF文件
  • 有PDF添加时触发脚本,等待30秒确保复制完成后,用pdfunite合并为MERGED.pdf并删除源文件
  • 若MERGED.pdf已存在则不执行任何操作,需用户删除该文件后才能启动新合并流程

现有脚本故障点

  1. 监控脚本重复触发:每次创建文件都会启动一个新的merge_script.sh实例,批量添加多个文件会生成多个脚本进程,互相干扰导致逻辑混乱
  2. 合并脚本逻辑缺陷:
    • 使用ls $dir/*.pdf | wc -l统计PDF数量,若文件名含空格会统计错误
    • 脚本本身是死循环,多个实例同时运行会重复执行合并/删除操作
    • 等待逻辑不合理,在循环中反复判断并sleep,浪费资源且时机错误

修复后的脚本

1. 监控脚本(monitor_pdf.sh)

#!/bin/bash

dir="/path/to/directory"
merge_script="/path/to/merge_script.sh"

# 确保监控目录存在
mkdir -p "$dir"

# 监控目录,仅处理PDF文件且避免重复触发合并脚本
while true; do
  inotifywait -e create "$dir" | while read path action file; do
    # 仅对PDF文件触发操作
    if [[ "$action" == "CREATE" && "$file" =~ \.pdf$ ]]; then
      # 检查合并脚本是否正在运行,防止重复启动
      if ! pgrep -f "$merge_script" > /dev/null; then
        "$merge_script" &
      fi
    fi
  done
done

2. 合并脚本(merge_script.sh)

#!/bin/bash

dir="/path/to/directory"
merged_file="$dir/MERGED.pdf"

# 如果MERGED.pdf已存在,直接退出
if [[ -f "$merged_file" ]]; then
  exit 0
fi

# 等待30秒,确保文件复制完成
sleep 30

# 安全统计PDF文件数量(排除已存在的MERGED.pdf)
pdf_count=$(find "$dir" -maxdepth 1 -type f -name "*.pdf" ! -name "MERGED.pdf" | wc -l)

# 只有PDF数量≥2时才执行合并操作
if [[ "$pdf_count" -ge 2 ]]; then
  # 合并所有PDF文件(按文件名排序保证顺序稳定)
  pdfunite $(find "$dir" -maxdepth 1 -type f -name "*.pdf" ! -name "MERGED.pdf" | sort) "$merged_file"
  
  # 删除源PDF文件
  find "$dir" -maxdepth 1 -type f -name "*.pdf" ! -name "MERGED.pdf" -delete
fi

脚本说明

  • 监控脚本:添加PDF后缀过滤,避免非PDF文件触发;通过pgrep确保同一时间只有一个合并脚本进程,彻底解决批量添加时重复触发的问题
  • 合并脚本:去掉死循环改为单次执行;用find替代ls处理带空格的文件名;先判断MERGED.pdf是否存在,存在直接退出;等待30秒后再统计文件数量,确保复制操作完成;合并时对文件排序,保证合并顺序稳定

使用步骤

  1. 将两个脚本中的/path/to/directory替换为实际监控目录路径
  2. 给脚本添加执行权限:chmod +x monitor_pdf.sh merge_script.sh
  3. 将监控脚本加入cron开机启动:@reboot /path/to/monitor_pdf.sh >> /var/log/pdf_merge.log 2>&1

内容的提问来源于stack exchange,提问作者ECII

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 20:50:27