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

Linux环境下如何判断外部系统上传的文件已完成复制?

判断Linux下文件复制完成的几种方法

在Linux环境中,当外部系统上传文件时,文件会提前可见但仍在后台写入,以下是几种可靠的判断复制完成的方式:

  • 检查文件大小是否稳定
    复制过程中文件大小会持续增加,当大小连续几次检查都保持不变时,说明写入已完成。可以用如下脚本实现:

    #!/bin/bash
    FILE="/path/to/your/file"
    PREV_SIZE=0
    STABLE_COUNT=0
    # 连续3次大小相同则认为完成
    while [ $STABLE_COUNT -lt 3 ]; do
        CURRENT_SIZE=$(stat -c %s "$FILE")
        if [ "$CURRENT_SIZE" -eq "$PREV_SIZE" ]; then
            STABLE_COUNT=$((STABLE_COUNT + 1))
        else
            STABLE_COUNT=0
            PREV_SIZE=$CURRENT_SIZE
        fi
        sleep 5  # 每5秒检查一次
    done
    echo "File copy completed"
    
  • 使用lsof检查文件是否被进程占用
    复制中的文件会被写入进程持有打开状态,通过lsof命令可以查看是否有进程在操作该文件:

    lsof /path/to/your/file
    

    如果命令没有输出,说明没有进程正在写入该文件,复制已完成。

  • 监听文件的close_write事件(推荐)
    利用inotifywait工具(需先安装inotify-tools包)监听文件的写入关闭事件,当文件完成写入并被关闭时,命令会自动退出:

    inotifywait -e close_write /path/to/your/file
    

    这种方式能精准捕获复制完成的瞬间,无需轮询,效率更高。

  • 检查文件修改时间是否稳定
    类似大小检查,复制过程中文件的修改时间(mtime)会不断更新,当mtime连续多次不变时,说明复制结束:

    #!/bin/bash
    FILE="/path/to/your/file"
    PREV_MTIME=0
    STABLE_COUNT=0
    while [ $STABLE_COUNT -lt 3 ]; do
        CURRENT_MTIME=$(stat -c %Y "$FILE")
        if [ "$CURRENT_MTIME" -eq "$PREV_MTIME" ]; then
            STABLE_COUNT=$((STABLE_COUNT + 1))
        else
            STABLE_COUNT=0
            PREV_MTIME=$CURRENT_MTIME
        fi
        sleep 5
    done
    echo "File copy completed"
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 16:25:24