我正在编写一个发布脚本,它使用 scp/sftp 从远程服务器获取文件,我们也希望将此脚本的输出记录到 release.log 文件中。我正在使用“tee”来实现这一点,它适用于所有情况,我的意思是标准输出和错误,但是当涉及到文件下载的进度(这需要时间来复制)时,它不会出现在控制台或文件中。
不带 tee 的 scp 输出
frrinstd@loneqflocfd0034.uk.db.com:/apps/flowrisk/valservice/release/London/uat2/vs-server-2.1.16-21190-linux-amd64-frod-uat2-London-dist.zip /apps/flowrisk/uatldn/valservice
vs-server-2.1.16-21190-linux-amd64-frod-uat2-London-dist.zip 100% 78MB 39.1MB/s 00:02
Run Code Online (Sandbox Code Playgroud)
scp WITH tee 的输出
frrinstd@loneqflocfd0034.uk.db.com:/apps/flowrisk/valservice/release/London/uat2/vs-server-2.1.16-21190-linux-amd64-frod-uat2-London-dist.zip /apps/flowrisk/uatldn/valservice
Run Code Online (Sandbox Code Playgroud)
有人可以告诉我如何使用 tee 在控制台上输出 scp/sftp 命令的进度,以便用户知道发生了什么?
在日志文件中包含进度表听起来不是很有用。将scp
其标准输出连接到终端来运行怎么样?这确实有一个缺点,如果脚本在传输过程中被中断,日志中将不会有任何指示进度的内容(但这是一个非常小的缺点,因为部分传输的大小)。
scp remotehost:/path/to/file /local/file >/dev/tty
Run Code Online (Sandbox Code Playgroud)
如果要保存 的进度输出scp
,可以使用script
.
script -q /dev/stdout -c 'scp remotehost:/path/to/file /local/file' | tee scp.log
Run Code Online (Sandbox Code Playgroud)
或者,您可以插入pv
管道以获取进度指示。这不像scp
因为pv
只知道传输的字节数而不是总数那么好。
ssh remotehost 'cat /path/to/file' | pv -bpt >/local/file
Run Code Online (Sandbox Code Playgroud)