如何捕获 LFTP 的输出?(输出未写入 STDOUT 或 STDERR?)

如何捕获 LFTP 的输出?(输出未写入 STDOUT 或 STDERR?)

我想从 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

相关内容