我经常在通过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该文件。