ftp文件下载,先判断文件是否下载完整,没下载完成就断点续传继续下载、shell脚本

本文介绍了一个bash脚本,用于从FTP服务器断点续传文件并验证其完整性,通过检查本地文件的大小和MD5校验和与远程文件对比实现这一功能。
摘要由CSDN通过智能技术生成

首先检查本地文件是否存在且大小是否与远程文件一致,以此判断文件是否已经下载完整。如果没有下载完整,则进行断点续传继续下载。同时,脚本保留了文件完整性校验功能:

 

bash

#!/bin/bash

# FTP服务器配置
FTP_HOST="your_ftp_host"
FTP_USER="your_username"
FTP_PASS="your_password"
FTP_REMOTE_FILE="remote_path/to/file.ext"
LOCAL_FILE="local_path/to/save/file.ext"

# 断点续传相关
TMP_FILE="$LOCAL_FILE.part"
RESUME_POS=0

# 文件完整性校验相关
CHECKSUM_ALGO="md5sum"  # 或者使用 sha1sum、sha256sum 等
REMOTE_CHECKSUM=$(ftp_cmd 'md5sum "$FTP_REMOTE_FILE"' | awk '{print $1}')
LOCAL_CHECKSUM=

function ftp_cmd() {
    local cmd=$1
    lftp -u "$FTP_USER,$FTP_PASS" -e "$cmd bye" sftp://$FTP_HOST
}

function is_file_downloaded() {
    if [ ! -f "$LOCAL_FILE" ]; then
        return 1
    fi

    REMOTE_SIZE=$(ftp_cmd 'du -b "$FTP_REMOTE_FILE"' | awk '{print $1}')
    LOCAL_SIZE=$(stat -c "%s" "$LOCAL_FILE")

    [ "$REMOTE_SIZE" -eq "$LOCAL_SIZE" ]
}

function download_file() {
    if [ -s "$TMP_FILE" ]; then
        RESUME_POS=$(stat -c "%s" "$TMP_FILE")
    fi

    wget --continue -O "$TMP_FILE" "ftp://$FTP_USER:$FTP_PASS@$FTP_HOST/$FTP_REMOTE_FILE"

    mv "$TMP_FILE" "$LOCAL_FILE"
}

function check_integrity() {
    LOCAL_CHECKSUM=$(eval "$CHECKSUM_ALGO $LOCAL_FILE")
    if [ "$LOCAL_CHECKSUM" != "$REMOTE_CHECKSUM" ]; then
        echo "File integrity check failed!"
        exit 1
    else
        echo "File downloaded and verified successfully."
    fi
}

if ! is_file_downloaded; then
    download_file
fi

check_integrity
  1. 添加了一个名为is_file_downloaded的新函数,该函数检查本地文件是否存在且大小是否与远程文件相同。如果存在且大小相等,返回真(即退出状态码为0),否则返回假(退出状态码非0)。

  2. 在主流程中,首先调用is_file_downloaded函数判断文件是否已经完整下载。若未完整下载(即is_file_downloaded返回假),则调用download_file函数进行断点续传下载;否则,跳过下载步骤。

  3. 最后,无论文件是否重新下载,均执行check_integrity函数进行文件完整性校验,确保下载后的文件与远程文件内容一致。

请确保替换脚本中的FTP服务器配置信息为您实际的主机名、用户名、密码以及文件路径。此脚本依然使用wget进行断点续传下载,并通过md5sum进行文件完整性校验。如果您希望使用其他工具或方法,可以根据实际情况对脚本进行相应调整。

  • 7
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

三希

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值