暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

使用lftp实现断点续传的功能

zayki 2025-04-22
262

lftp 是一款类 Unix 系统下命令行界面的 FTP 客户端软件,作者是 Alexander Lukyanov ,在 GNU通用公共许可证下发布。除了 FTP 外,还支持 FTPS 、 HTTP 、 HTTPS 、 SFTP 、 FXP 等多种协议。此外, lftp 也内含一个简单的 BitTorrent 客户端。

以下是使用lftp实现断点续传的一个脚本示例:

#!/bin/bash # 配置信息 HOST="8.8.4.18" # 远程主机地址 USER="u38" # 用户名 PASS="sj21sdf@" # 密码 LOCAL_DIR="/opt/localdir" # 本地目录 REMOTE_DIR="/2025/remotedir" # 远程目录 echo "Start upload files at:"`date +%Y-%m-%d_%H:%M:%S` # 使用lftp命令批量上传 lftp -u ${USER},${PASS} sftp://${HOST}/${REMOTE_DIR} <<EOF pwd lcd ${LOCAL_DIR} lpwd mput -c *.zip bye EOF # 检查上传结果 if [ $? -eq 0 ]; then echo "文件上传成功!" echo `date +%Y-%m-%d_%H:%M:%S` else echo `date +%Y-%m-%d_%H:%M:%S` echo "文件上传失败!" fi

为了防止在传输过程中出现异常,导致上传文件遇到问题(在手动上传过程中,出现过一次网络闪断,还有一次文件大小长时间不变),我又准备了一个脚本/root/checkftp.sh放到任务计划中,每隔五分钟执行一次,内容如下:

pid=`ps -ef|grep lftp |grep u38|awk '{print $2}'` if [ -z $pid ]; then echo "lftp进程已退出,restart lftp process." nohup /root/lftp_upload.sh &>/root/lftp.upload.log & else echo "`date +%Y-%m-%d/%H:%M:%S` >>> lftp进程未退出,进程号:$pid" fi read current_upload_last_filesize file_name <<< `/root/sftp_checkfiles.sh |tail -2 |head -1 |awk '{print $5, $NF}'` if [ -f /root/upload_last_filesize.txt ];then forward_upload_last_filesize=`cat /root/upload_last_filesize.txt` else forward_upload_last_filesize=${current_upload_last_filesize} fi echo ${current_upload_last_filesize} > /root/upload_last_filesize.txt if [ ${current_upload_last_filesize} -eq $forward_upload_last_filesize ];then echo "File size not changed,it's need to restart lftp process." kill -9 $pid nohup /root/lftp_upload.sh &>/root/lftp.upload.log & else echo "The size of $file_name has been changed to ${current_upload_last_filesize} from $forward_upload_last_filesize,nothing to do." fi

/root/sftp_checkfiles.sh脚本内容如下:

#!/bin/bash # 配置信息 HOST="8.8.4.18" # 远程主机地址 USER="u38" # 用户名 PASS="sj21sdf@" # 密码 LOCAL_DIR="/opt/localdir" # 本地目录 REMOTE_DIR="/2025/remotedir" # 远程目录 # 使用sftp命令批量上传 sshpass -p "$PASS" sftp -oBatchMode=no -b - $USER@$HOST <<EOF ls -lrt $REMOTE_DIR exit EOF

最后一个脚本可以用一个命令替换。

sshpass -p "sj21sdf@" sftp -oBatchMode=no -b <(echo 'ls -lrt /2025/remotedir') u38@8.8.4.18
最后修改时间:2025-04-22 17:42:29
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论