it-swarm-es.tech

¿Mostrar la velocidad de transferencia cuando se realiza "cp" desde la línea de comando?

Es posible?

50
Chris

El comando estándar coreutils cp no es compatible con esto. Hay un parche de Gentoo flotando que lo agrega para diferentes versiones, aunque ya no está incluido en Gentoo por alguna razón; la versión para coreutils 6.10 es en su bugzilla , y estoy seguro de que hay muchos otros.

Si no desea parchear cp, necesita usar algún otro comando. Por ejemplo, rsync tiene un --progress flag, para que puedas hacer:

rsync --progress source destination

Si en lugar de copiar, captura los datos y luego redirige stdout al destino (es decir, cat source > destination), entonces puede usar un programa que mide el rendimiento de la tubería e insertarlo en el medio (cat source | SOME-PROGRAM > destination); hay un par mencionado en esta pregunta relacionada . El que recomendé fue pv (Pipe Viewer):

Screenshot of pv from the pv homepage

Si le das el --rate marca que mostrará la velocidad de transferencia

53
Michael Mrozek

Encuentro que usar pv de esta manera funciona bien para ese propósito

pv -p file1 > file2

Los -p el interruptor muestra el progreso de la transferencia de archivos. Para ver la velocidad de transferencia, agregue -r interruptor. Si desea ver la tasa de transferencia promedio a lo largo del tiempo, puede usar -a interruptor.

pv -pra file1 > file2
17
Patrick

Sé que esto es bastante viejo, pero ...

Si en realidad no desea mostrar la velocidad, pero solo quiere ver si sucede algo al copiar un archivo grande, también puede usar el comando watch (también funciona con mv ):

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

Luego, en otro Shell, o empujando el comando copiar al fondo (por ejemplo, con Ctrl + Z seguido de bg), puede verificar el resultado con:

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

Esto actualizará continuamente la salida de la actualización del comando ls (por defecto cada 2.0s), mostrando algo como:

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

Hola Otra forma de mostrar la velocidad de transferencia es usar scp en localhost de esta manera:
scp -rv src_folder [email protected]:/dest_folder

5
Christoph Kuhr

Aquí hay un script que usa du para monitorear el rendimiento. Esto es más independiente de la aplicación y también se hace referencia en https://unix.stackexchange.com/a/301490/183269 . Ejecute el script en el host de destino.

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
}

ejemplo de uso:

[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