如何取消缓冲并捕获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
相关产品推荐
相关产品推荐

