我想从 lftp 获取进度信息。目前,我使用 curl 如下:
curl http://example.com/file -o file -L 2> download.log
这会将 curl 的进度信息写入 download.log 文件,我可以通过跟踪该文件来获取实时进度。
但同样的方法不适用于 lftp,无论是 stdout 还是 stderr。我最终得到一个空的 download.log 文件,直到传输完成。
lftp -e 'get http://example.com/file;quit' 2> download.log
lftp -e 'get http://example.com/file;quit' 1> download.log
当我不重定向输出时,我会在屏幕上看到进度。当我重定向输出时,我会在屏幕上看不到进度,但 download.log 中什么也没有显示。文件传输完成后,我会看到最终结果,如下所示 - 但之前什么都没有:
97618627 bytes transferred in 104 seconds (913.1K/s)
lftp 的输出是否异常 - 打印到屏幕上而不打印到 stdout/stderr?除了重定向 stdout/stderr 之外,还有其他方法可以捕获屏幕输出吗?
答案1
答案2
set
在 lftp 中输入命令查看“log:file/xfer”的默认设置。
可能的输出:
set log:file/xfer /home/USERNAME/.local/share/lftp/transfer_log
当然,您可以采用不同的方式改变这一点。
lftp -c 'open -e "set log:file/xfer /home/USERNAME/myown.log; mget *.csv; bye" -u uname,psswd 172.16.100.101' >> $log
答案3
检查传输域变量:
设置 xfer:log 1
设置 xfer:eta-period 5 # 每 5 秒
设置 xfer:rate-period 20 # 平均利率
会将日志传输信息放入 ~/.lftp/transfer_log 中
不过不确定你是否可以更改日志文件的目标位置
答案4
尝试这个来捕获进度信息:lftp sftp://$SFTPUSER:$SFTPPASS@$SFTPHOST -e "cd $DIRECTORY; mget $SFTPFILE; bye" > $SFTPLOG 2>&1