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

如何取消缓冲并捕获LFTP EOF命令的输出(含进度百分比)

LFTP镜像进度百分比捕获的解决思路

1. 替换unbuffer为更通用的stdbuf强制关闭缓冲

unbuffer依赖expect工具包,部分环境支持不佳,改用stdbuf直接禁用stdout和stderr的缓冲,确保进度信息实时输出到日志:

stdbuf -o0 -e0 lftp $PROTOCOL://$URL -u ${USER},${PASS} << EOF 2>&1 | tee ${LOGSTDOUT}
set dns:fatal-timeout never
set sftp:auto-confirm yes
set mirror:use-pget-n 50
set mirror:parallel-transfer-count 2
set mirror:parallel-directories yes
set mirror:include-regex $REGEX
set log:enabled/xfer yes
set log:file/xfer $LOG
set xfer:use-temp-file yes
set xfer:temp-file-name *.lftp
set cmd:show-progress yes  # 显式开启进度百分比显示
mirror -c -v --loop --Remove-source-dirs "$REMOTEDIR" "$LOCALDIR"
quit
EOF
  • stdbuf -o0 -e0:强制关闭标准输出和标准错误的缓冲
  • 2>&1 | tee ${LOGSTDOUT}:将stderr合并到stdout,同时输出到终端和日志文件

2. 启用LFTP内置的进度显示配置

默认情况下LFTP的进度百分比可能未完全启用,添加set cmd:show-progress yes配置,确保传输过程中输出实时进度。

3. 排查unbuffer失效的根源

如果坚持使用unbuffer,先确认系统已安装expect包(执行which unbuffer验证),若存在,尝试添加-p参数模拟伪终端环境:

unbuffer -p lftp $PROTOCOL://$URL -u ${USER},${PASS} << EOF 2>&1 | tee ${LOGSTDOUT}
# 其余配置不变
EOF

4. 区分xfer日志与进度日志

xfer日志仅记录传输完成的文件明细,不会包含实时进度百分比。需将LFTP的终端输出(包含进度)单独捕获,xfer日志保留作为传输记录备查。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 09:32:40