Exibe a velocidade de transferência ao executar "cp" a partir da linha de comando? [duplicado]

47

Isso é possível?

    
por Chris 28.10.2010 / 15:18

5 respostas

48

O comando standard coreutils cp não suporta isso. Há um patch do Gentoo flutuando que o adiciona para versões diferentes, embora não esteja mais incluído no Gentoo por algum motivo; a versão para o coreutils 6.10 é em seu bugzilla , e tenho certeza que existem muitos de outros ao redor.

Se você não quiser corrigir cp , precisará usar outro comando. Por exemplo, rsync tem um sinal --progress , portanto, você pode fazer:

rsync --progress source destination

Se, em vez de copiar os dados do cat e então redirecionar o stdout para o destino (ou seja, cat source > destination ), você poderá usar um programa que mede o throughput do pipe e inseri-lo no meio ( cat source | SOME-PROGRAM > destination ); Há um casal mencionado em esta questão relacionada . O que eu recomendei lá foi pv (Pipe Viewer):

Se você der a ele o sinal --rate , ele mostrará a taxa de transferência

    
por 28.10.2010 / 16:07
14

Eu acho que usar pv dessa maneira funciona bem para esse propósito

pv -p file1 > file2

A opção -p mostra o progresso da transferência de arquivos. Para ver a velocidade de transferência, adicione a opção -r . Se você quiser ver a taxa de transferência média ao longo do tempo, use a opção -a .

pv -pra file1 > file2
    
por 29.10.2010 / 17:25
9

Eu sei que isso é um pouco antigo, mas ...

Se você não deseja realmente exibir a taxa, mas apenas deseja observar se algo está acontecendo na cópia de um arquivo grande, também é possível usar apenas o comando watch (também funciona com mv ):

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

Em seguida, em outro shell ou enviando o comando copy para o segundo plano (por exemplo, com Ctrl + Z seguido por bg ), você pode verificar o resultado com:

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

Isso atualizará continuamente a saída da atualização do comando ls (por padrão, a cada 2.0s), exibindo 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
    
por 12.01.2016 / 15:10
4

Oi Outra maneira de mostrar a velocidade de transferência é usar scp no localhost assim:
scp -rv src_folder user@localhost:/dest_folder

    
por 18.02.2013 / 07:34
1

Aqui está um script que usa du para monitorar a taxa de transferência. Isso é mais independente de aplicativos e também é mencionado no link . Execute o script no 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
}

exemplo de uso:

user@host:~$ dd if=/dev/zero of=/tmp/zero bs=1 count=50000000 &
user@host:~$ 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
user@host:~$ killall dd; rm /tmp/zero
    
por 05.08.2016 / 14:02