在慢速连接中使用ssh时,请停止快速减速和详细操作

我经常在通过1GBit以太网连接的2台服务器之间复制许多文件,而通过VPN和SSH通过DSL连接。 问题是,需要通过慢速连接发送到我的SSH客户端的详细输出(每个复制文件1行),并减慢了复制操作(这对我来说是这样的感觉)

我用通过创build的testing文件testing了这个

dd if=/dev/urandom | base64 | dd of=testfile count=10M bs=1 

testing运行A(无输出)

 # time sh -c 'cat testfile > /dev/null' sh -c 'cat testfile > /dev/null' 0.00s user 0.02s system 97% cpu 0.025 total 

testing运行B(所有通过ssh / vpn输出)

 # time sh -c 'cat testfile' sh -c 'cat testfile' 0.00s user 0.45s system 0% cpu 4:31.10 total 

(我知道,它不是一个好的testing,但是它certificate了这个问题)

有没有办法减缓操作,并获得输出asynchronous。 我想像一下,除了每秒钟指定的计数或类似的东西,所有的行都被删除。

此刻我开始屏幕并在操作运行时分离。

我使用腻子的Windows和openssh客户端的Linux访问

有任何想法吗?

你不会说你用来做这个副本,但是我想这并不重要。

你可以尝试这样的使用pv

 your-copy-command 2>&1 | tee progress.out | pv -trlb >/dev/null 

这给你一个低开销的进度指标:

 502 0:00:20 [25.1/s ] 

它显示了你将会看到的文件名 (不是文件内容)的行数。 tee命令会将此输出保存在远程系统上,以防您需要查看。 然后输出被丢弃。

这里有一种方法可以在没有pv情况下做类似的事情

 your-copy-command 2>&1 | tee progress.out | progress >/dev/null 

progress是一个脚本,如:

 #!/bin/bash SECONDS=0 # auto update variable while read -r line do if ((count++ % 10 == 9)) then printf "%s sec, %s lines\r" $SECONDS $count >&2 fi echo "$line" done 

如果将输出pipe道输送到更less位置,会发生什么情况,如在cp ab |中 减

如果我正确地理解这个,听起来就像是由于terminal缓冲而放慢速度!

你需要看到转移的输出吗? 如果不是,请使用-q或适当的选项来使每个文件传输输出无效。 如果您需要这些数据,请将输出redirect到一个文件供以后查看。 那么你可以tail -f该文件。