it-swarm.cn

从命令行执行“ cp”时显示传输速度吗?

这可能吗?

50
Chris

标准coreutils cp命令不支持此功能。有一个Gentoo补丁在周围浮动,可以为不同的版本添加它,尽管出于某些原因它不再包含在Gentoo中。 coreutils 6.10的版本是 在其bugzilla中 ,我敢肯定还有很多其他版本。

如果您不想修补cp,则需要使用其他命令。例如,rsync具有--progress标志,因此您可以执行以下操作:

rsync --progress source destination

如果不是复制而不是复制数据,则将标准输出重定向到目标位置(即cat source > destination),则可以使用测量管道吞吐量的程序并将其插入到中间(cat source | SOME-PROGRAM > destination); 此相关问题 中提到了几对。我推荐的那个是 pv (管道查看器):

Screenshot of pv from the pv homepage

如果您给它--rate标志,它将显示传输速率

53
Michael Mrozek

我发现以这种方式使用PV可以很好地达到目的

pv -p file1 > file2

-p开关显示文件传输进度。要查看传输速度,请添加-r开关。如果要查看一段时间内的平均传输速率,可以使用-a开关。

pv -pra file1 > file2
17
Patrick

我知道这很老了,但是...

如果您实际上不想显示速率,而只想查看复制大文件时是否发生了某些情况,则也可以使用watch命令(也可以与mv一起使用) ):

cp /path/to/myfile /path/to/target/myfile

然后,在另一个Shell中,或将复制命令推到后台(例如,使用Ctrl + Z后跟bg),您可以使用以下方法检查结果:

watch "ls -sh1 /path/to/target"

这将连续更新ls命令更新的输出(默认情况下,每2.0秒更新一次),显示如下:

Every 2.0s: ls -sh1 /path/to/target                                      
Tue Jan 12 15:02:45 2016

total 1.1G
4.0K data
130M tmp1.txt
137M tmp2.txt
151M tmp3.txt
168M tmp4.txt
162M myFile
9
muelleth

您好,显示传输速度的另一种方法是在本地主机上使用scp,如下所示:
scp -rv src_folder [email protected]:/dest_folder

5
Christoph Kuhr

这是一个使用du监视吞吐量的脚本。这与应用程序无关,并且在 https://unix.stackexchange.com/a/301490/183269 中引用。在目标主机上执行脚本。

monitorio () {
# show write speed for file or directory
    interval="10"
    target="$1"
    size=$(du -ks "$target" | awk '{print $1}')
    firstrun="1"
    echo ""
    while [ 1 ]; do
        prevsize=$size
        size=$(du -ks "$target" | awk '{print $1}')
        #size=$(ls -l "$1"  | awk '{print $5/1024}')
        kb=$((${size} - ${prevsize}))
        kbmin=$((${kb}* (60/${interval}) ))
        kbhour=$((${kbmin}*60))
        # exit if this is not first loop & file size has not changed
        if [ $firstrun -ne 1 ] && [ $kb -eq 0 ]; then break; fi
        echo -e "\e[1A $target changed ${kb}KB ${kbmin}KB/min ${kbhour}KB/hour size: ${size}KB"
        firstrun=0
        sleep $interval
    done
}

示例使用:

[email protected]:~$ dd if=/dev/zero of=/tmp/zero bs=1 count=50000000 &
[email protected]:~$ monitorio /tmp/zero
/tmp/zero changed 4KB 24KB/min 1440KB/hour size: 4164KB
/tmp/zero changed 9168KB 55008KB/min 3300480KB/hour size: 13332KB
/tmp/zero changed 9276KB 55656KB/min 3339360KB/hour size: 22608KB
/tmp/zero changed 8856KB 53136KB/min 3188160KB/hour size: 31464KB
^C
[email protected]:~$ killall dd; rm /tmp/zero
1
gesell