É possível ver a velocidade do CP e o percentual copiado?

213

Estou tendo problemas ao copiar arquivos grandes usando o nautilus (ele fica preso). Eu preciso copiar, usando cp . Gostaria de saber se existem parâmetros que mostrem o% copiado e também a velocidade de transferência.

    
por yzT 17.02.2013 / 14:23

15 respostas

158

rsync tem um sinalizador chamado progress2 , que mostra a porcentagem geral:

rsync --info=progress2 source dest
    
por 18.02.2013 / 20:56
98

Se você permitir outras ferramentas além de cp , certamente é possível. Para um único arquivo, você pode usar pv . É uma pequena ferramenta que fornece boas estatísticas.

pv inputfile > outputfile

Se você tem vários arquivos ou diretórios, você pode usar tar:

tar c sourceDirectory | pv | tar x -C destinationDirectory

Você pode envolvê-lo em uma função de shell. É menos para digitar e você obtém semânticas próximas às de cp . Aqui está uma função muito simples (e não à prova de erros!):

cpstat () {
  tar c "$1" | pv | tar x -C "$2"
}

Observe que algumas versões de tar não suportam a sintaxe mencionada acima (por exemplo, Solaris tar ) e você precisa usar a seguinte variante:

cpstat () {
  tar cf - "$1" | pv | (cd "$2";tar xf -)
}

Você chama assim

cpstat sourceDirectory destinationDirectory

Você pode melhorar ainda mais, para que pv forneça uma estimativa do tempo restante.

Outra solução (como frostschutz mencionada em um comentário) é usar o rsync com a opção --progress :

rsync --progress -a sourceDirectory destinationDirectory
    
por 17.02.2013 / 15:13
52

rsync funciona melhor para mostrar o progresso durante o progresso da cópia.

ex:

rsync -avh --progress sourceDirectory destinationDirectory
    
por 02.01.2014 / 06:55
24

Como explicado em outras respostas, o cp não fornece essa funcionalidade. No entanto, o progresso (anteriormente chamado cv) é uma pequena ferramenta que é muito útil para fornecer esse recurso ausente.

This tool can be described as a Tiny Dirty Linux Only* C command that looks for coreutils basic commands (cp, mv, dd, tar, gzip/gunzip, cat, ...) currently running on your system and displays the percentage of copied data.

Eu tenho usado isso nos últimos meses e é sólido.

    
por 21.11.2014 / 11:25
14

Notou que essa postagem era um pouco antiga. Mas como eu fiz uma solução para o problema em questão, pensei em postar minha solução.

Cenário: Temos uma estrutura de diretórios muito grande que queremos copiar, então emitimos o comando cp -R sourcedir destdir em uma janela de terminal.

Abra outra janela de terminal ou envie o processo para o plano de fundo (Ctrl+Z,bg<CR>) , então vamos fazer um indicador de progresso no caminho do gueto:

Primeiro, obtemos o tamanho total da estrutura de diretórios que queremos copiar, você faz isso com:

du -sh /path/sourcedirectory/

Converta o resultado em gigabytes (G) e, em seguida, substitua o n pelo resultado obtido na variável sourcesize. Depois de inserir o sourceize e o destdir (diretório de destino), execute o comando abaixo.

while true; do sourcesize=n destdir=/path/destinationdirectory/ copyprogress="$(export | du -sh $destdir | awk '{print $1}' | sed 's/[^0-9.]*//g' )" ; echo "scale=3 ; $copyprogress / $sourcesize * 100" | bc | xargs echo -n ; echo % completed ; sleep 10 ; done

Isso imprimirá o progresso a cada 10 segundos com mensagens como:

0.100% completed
0.200% completed
0.300% completed 
... etc

Estou ciente de que essa solução não abordou a velocidade da cópia, mas seria possível adicionar isso expandindo os comandos acima, possivelmente tornando-a um script bash, para facilitar a leitura. Por exemplo, verificando quantos dados são copiados pr. Na unidade de tempo, a velocidade deve ser trivial para calcular e exibir.

    
por 07.09.2014 / 11:10
10

Is it possible to see cp speed and percent copied?

Sim, é possível exibir o progresso do comando cp no terminal.

Método 1: (use progress )

Abra um novo terminal e digite progress , ele exibirá o progresso do comando cp e outros comandos, como:

cp, mv, dd, tar, cat, rsync, grep, fgrep, egrep, cut, sort, md5sum, sha1sum, sha224sum, sha256sum, sha384sum, sha512sum, adb, gzip, gunzip, bzip2, bunzip2, xz, unxz, lzma, unlzma, 7z, zcat, bzcat, lzcat, split, gpg

Se você não instalou o progress , poderá instalá-lo a partir do repositório, por exemplo, no CentOS com este comando: yum -y install progress .

Em seguida, depois de executar o comando cp em segundo plano ou depois de executar cp normalmente, abra outro terminal, então tente este comando:

# progress -m

Veja a saída:

[30904] cp /home/user/file.mp4
        2.3% (200.9 MiB / 8.4 GiB) 3.6 MiB/s remaining 0:38:58

Método 2: (use patch cp )

Ou faça o download do GNU coreutils e corrija-o.

cd /tmp
wget http://ftp.gnu.org/gnu/coreutils/coreutils-8.21.tar.xz
tar -xvJf coreutils-8.21.tar.xz
cd coreutils-8.21
wget https://raw.githubusercontent.com/atdt/advcpmv/master/advcpmv-0.5-8.21.patch
patch -p1 -i advcpmv-0.5-8.21.patch

Executar:

export FORCE_UNSAFE_CONFIGURE=1
./configure
make

Copie os dois arquivos cp e mv loacated em coreutils-8.21/src/ to /usr/local/bin :

cp src/cp /usr/local/bin/cp
cp src/mv /usr/local/bin/mv

Ou copie-o usando o gerenciador de arquivos como root

Adicione as seguintes linhas ao seu ~/.bashrc :

alias cp='cp -gR'
alias mv='mv -g'

Logout e Login

A barra de progresso pode ser exibida sem o –g ou –progress-bar conforme recomendado pelo Autor

Veja a saída:

0 files copied so far...                                              194.4 MiB /   8.4 GiB
[||--------------------------------------------------------------------------------]  2.3 %
Copying at   3.3 MiB/s (about 0h 5m 47s remaining)
/home/user/file.mp4                                                   194.4 MiB / 446.1 MiB
[||||||||||||||||||||||||||||||||||||----------------------------------------------] 43.6 %

Fonte: linuxhelp

    
por 04.08.2016 / 18:18
7

Para melhorar a resposta do Marco, hoje eu escrevi esta versão do cpstat , então você pode copiar muitos diretórios e usar o último parâmetro como o caminho de destino. Observe que, se você usar um caminho profundo relativo como origem, você poderá, graças a tar , criar automaticamente a mesma árvore de diretórios dependente.

function cpstat () {

    tar -cf - "${@: 1: $#-1}" |
    pv -s "$( du -cs -BK --apparent-size "${@: 1: $#-1}" |
              tail -n 1 |
              cut -d "$(echo -e "\t")" -f 1)" |
    ( cd "${@: $#}"; tar -xf - )

;}
    
por 02.04.2015 / 17:01
6

Não em uma versão padrão de cp .

Você pode colocar em segundo plano o cp e listar o tamanho enquanto aguarda que cp termine.

Eu uso este perl para monitorar o crescimento de um único arquivo, mas ele é executado externamente para o cp (ou o que for mais eu estou fazendo)

    
por 17.02.2013 / 14:46
5

Eu achei isso para usar, funcionou muito bem:

sudo watch lsof -p'pgrep -x cp'

de um comentário de Mike sobre a questão como verificar o progresso da execução do cp

    
por 24.05.2016 / 22:50
4

Outra solução simples é apenas observar a pasta de saída da seguinte forma:

watch -n 10 --differences du -sk --apparent-size <WATCHED_FOLDER>

Este utilitário prático executará du e destacará as diferenças.

Uma outra solução potencial seria escrever um script simples que faça um loop, chamando du e cuspindo uma estimativa aproximada da taxa de transferência.

    
por 23.02.2016 / 18:32
4

Usar uma ferramenta como mc (midnight commander) pode ser uma boa opção alternativa para outras respostas.

É um gerenciador de arquivos simples que mostra o progresso da cópia / movimentação.

    
por 04.08.2016 / 16:32
4

Mesmo que rsync forneça algumas estatísticas de progresso, se você quiser uma barra de progresso, use pv .

Você pode usar cpv , um wrapper para pv com uma sintaxe mais fácil, mais semelhante à de cp que você pode usar para copiar diretórios recursivamente

Vocêpodeobter aqui

    
por 14.09.2017 / 09:40
3

Esta ferramenta é um comando do utilitário Linux que procura por comandos básicos do coreutils (cp, mv, dd, tar, gzip / gunzip, cat etc.) atualmente em execução no sistema e exibe a porcentagem de dados copiados:

link

    
por 05.04.2015 / 14:53
3

dd status=progress

Opção adicionada no GNU Coreutils 8.24+ (Ubuntu 16.04):

dd if=src of=dst status=progress

O Stdout é uma linha atualizada periodicamente, como:

462858752 bytes (463 MB, 441 MiB) copied, 38 s, 12,2 MB/s

Veja também: Como você monitora o progresso do dd? | Pergunte ao Ubuntu

    
por 14.09.2016 / 23:00
2

Acabei de ter um caso em que o cp estava mais ou menos bloqueado devido a um bug do FUSE no sistema de arquivos de recebimento.

Se você não pode simplesmente mudar de cp (ou seja, porque --sparse = sempre) e quer algo que é realmente confiável para o progresso, vá em / proc.

Every 2.0s: cat /proc/20977/io                                                      Thu Sep 28 04:08:57 2017

rchar: 268573800
wchar: 268500992
syscr: 4112
syscw: 4097
read_bytes: 268697600
write_bytes: 0
cancelled_write_bytes: 0
    
por 28.09.2017 / 04:10

Tags