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

如何编写bash脚本监听/Downloads新下载文件自动生成哈希并提交API

监听Downloads目录下载完成事件的Bash脚本实现方案

核心逻辑说明

你之前仅监听inotify的新建事件无法生效,是因为主流浏览器的下载逻辑为:

  • 先创建.crdownload/.part后缀的临时文件
  • 持续向临时文件写入下载内容
  • 全部写入完成后,重命名为最终的目标文件名
    因此需要监听文件写入完成后关闭和文件移入目录两个事件,即可准确捕获下载完成的时机。

依赖安装

首先安装inotify-tools工具包:

# Debian/Ubuntu 系列
sudo apt install inotify-tools
# RHEL/CentOS/Fedora 系列
sudo dnf install inotify-tools

完整脚本示例

#!/bin/bash
# 监听的下载目录
MONITOR_DIR="/Downloads"
# 你的API接口地址
API_URL="http://your-api-endpoint/upload-hash"
# 排除浏览器下载过程中的临时文件后缀
EXCLUDE_SUFFIX="(\.crdownload|\.part|\.tmp|\.partial)$"

inotifywait -m -q -e close_write,moved_to --exclude "$EXCLUDE_SUFFIX" "$MONITOR_DIR" | while read -r directory events filename; do
    # 拼接完整文件路径
    FILE_PATH="${directory}${filename}"
    # 跳过目录,仅处理普通文件
    if [ -f "$FILE_PATH" ]; then
        # 生成SHA256哈希值,也可替换为md5/sha1等
        FILE_HASH=$(sha256sum "$FILE_PATH" | awk '{print $1}')
        # 发送哈希到API,此处为POST表单示例,可根据API要求调整参数格式
        curl -s -X POST "$API_URL" \
            -d "filename=${filename}" \
            -d "sha256=${FILE_HASH}" \
            -d "file_path=${FILE_PATH}"
        # 可自行添加执行成功/失败的日志逻辑
        echo "$(date '+%Y-%m-%d %H:%M:%S') 处理完成:${FILE_PATH},哈希值:${FILE_HASH}" >> /var/log/download_monitor.log
    fi
done

使用说明

  1. 将上述脚本保存为download_monitor.sh
  2. 赋予执行权限:chmod +x download_monitor.sh
  3. 测试运行无异常后,可配置为systemd服务实现开机自启动

可选优化点

  • 可添加请求失败重试逻辑,避免API接口临时不可用导致上报失败
  • 如需处理特殊格式的下载文件,可自行调整临时文件排除规则
  • 可添加哈希计算失败、文件不存在等异常场景的容错处理

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 18:06:01