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

cPanel共享主机环境下带变更类型标识的每日文件监控脚本需求

cPanel共享主机环境下带变更类型标识的每日文件监控脚本需求

我完全懂你的困扰——在cPanel共享主机上没权限装fswatch、inotify这类专业监控工具,现有的find命令只能列出文件,却没法区分是新增、修改还是删除,确实有点棘手。既然git能用但不想折腾仓库提交那套流程,那咱们可以用基础的文件快照对比法来实现,思路特别简单:每天生成一份包含文件修改时间和路径的快照,第二天和前一天的快照做对比,就能精准区分出新增、修改、删除的文件,再标记对应的类型后发邮件就行。

下面给你一套简单易上手的可脚本化方案,拆解成几步:

  1. 准备快照存储目录
    先在你的用户目录下建个隐藏目录来存每日快照,避免误删:

    mkdir -p ~/.file_monitor_snapshots
    
  2. 编写监控脚本
    创建一个名为daily_file_monitor.sh的脚本,内容如下:

    #!/bin/bash
    
    # 配置参数,根据你的实际情况修改
    WATCH_DIR="/home/user/public_html"
    EXCLUDE_PATTERNS="*/exclude1* */exclude2/etc*"
    SNAPSHOT_DIR="$HOME/.file_monitor_snapshots"
    TODAY_SNAP="$SNAPSHOT_DIR/$(date +%Y%m%d).snap"
    YESTERDAY_SNAP="$SNAPSHOT_DIR/$(date -d '1 day ago' +%Y%m%d).snap"
    REPORT_FILE="/tmp/file_changes_report.txt"
    EMAIL="user@user.com"
    
    # 生成今日文件快照:格式为「时间戳 完整文件路径」,方便后续对比
    find "$WATCH_DIR" -type f $(printf "! -path '%s' " $EXCLUDE_PATTERNS) -printf "%T@ %p\n" | sort > "$TODAY_SNAP"
    
    # 初始化报告内容
    echo "=== 每日文件监控报告 $(date +%Y-%m-%d) ===" > "$REPORT_FILE"
    echo "" >> "$REPORT_FILE"
    
    # 对比昨日和今日的快照,生成变更记录
    if [ -f "$YESTERDAY_SNAP" ]; then
        # 新增文件:只在今日快照中出现的文件
        echo "【N 新增文件】" >> "$REPORT_FILE"
        comm -13 "$YESTERDAY_SNAP" "$TODAY_SNAP" | awk '{print "N " $2}' >> "$REPORT_FILE"
        echo "" >> "$REPORT_FILE"
    
        # 删除文件:只在昨日快照中出现的文件
        echo "【D 删除文件】" >> "$REPORT_FILE"
        comm -23 "$YESTERDAY_SNAP" "$TODAY_SNAP" | awk '{print "D " $2}' >> "$REPORT_FILE"
        echo "" >> "$REPORT_FILE"
    
        # 修改文件:在两个快照都存在,但时间戳不同的文件
        echo "【E 修改文件】" >> "$REPORT_FILE"
        join "$YESTERDAY_SNAP" "$TODAY_SNAP" | awk '$1 != $3 {print "E " $2}' >> "$REPORT_FILE"
    else
        # 第一次运行时没有昨日快照,把当前所有文件标记为新增作为初始记录
        echo "首次运行,当前目录下的所有文件:" >> "$REPORT_FILE"
        awk '{print "N " $2}' "$TODAY_SNAP" >> "$REPORT_FILE"
    fi
    
    # 发送邮件报告
    mail -e -s "File Monitor Report $(date +%Y-%m-%d)" "$EMAIL" < "$REPORT_FILE"
    
    # 自动清理7天前的旧快照,避免占用过多磁盘空间
    find "$SNAPSHOT_DIR" -name "*.snap" -mtime +7 -delete
    
  3. 设置脚本权限与定时任务

    • 给脚本添加执行权限:
      chmod +x ~/daily_file_monitor.sh
      
    • 登录cPanel找到「Cron定时任务」,设置每天运行一次(比如凌晨2点),执行命令填:
      ~/daily_file_monitor.sh
      

方案说明

  • 这套脚本完全依赖系统基础命令(find、comm、join、awk),不需要额外安装任何工具,完美适配cPanel共享主机的限制。
  • 通过对比文件时间戳和路径,精准区分三种变更类型,和你想要的「E编辑、N新建、D删除」需求完全匹配。
  • 自动清理旧快照,不会占用过多磁盘空间;首次运行会生成初始文件列表,后续每天正常对比变更。
  • 如果需要调整监控周期(比如每3天一次),只需要修改Cron的执行频率,或者调整脚本里YESTERDAY_SNAP的日期参数(比如改成date -d '3 days ago')。

备注:内容来源于stack exchange,提问作者Spacecabbie

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.22 07:08:15