AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / ubuntu / Perguntas / 17275
Accepted
Olivier Lalonde
Olivier Lalonde
Asked: 2010-12-14 20:48:30 +0800 CST2010-12-14 20:48:30 +0800 CST 2010-12-14 20:48:30 +0800 CST

Como mostrar o progresso e a velocidade da transferência ao copiar arquivos com cp?

  • 772

Caso contrário, existe algum utilitário de linha de comando alternativo que possa fazer isso?

command-line coreutils
  • 24 24 respostas
  • 886266 Views

24 respostas

  • Voted
  1. Best Answer
    Stefano Palazzo
    2010-12-14T21:17:16+08:002010-12-14T21:17:16+08:00

    Embora cpnão tenha essa funcionalidade, você pode usar pvpara fazer isso:

    pv my_big_file > backup/my_big_file
    

    Nota: este método perderá as permissões e a propriedade do arquivo. Os arquivos copiados dessa maneira terão as mesmas permissões como se você os tivesse criado e pertencerão a você.

    Neste exemplo, pvbasicamente apenas gera o arquivo para stdout*, que você redireciona para um arquivo usando o >operador. Simultaneamente, ele imprime informações sobre o progresso no terminal quando você faz isso.

    Isto é o que parece:

    stefano@ubuntu:~/Data$ pv my_big_file > backup/my_big_file
     138MB 0:00:01 [73.3MB/s] [=================================>] 100% 
    

    Você pode precisar  instalar pv (alternativamente, digite sudo apt-get install pv) em seu sistema.


    *: A parte técnica

    Existem três fluxos de dados importantes em um sistema do tipo unix: stdout (saída padrão), stderr (erro padrão) e stdin (entrada padrão). Cada programa tem todos os três, por assim dizer. O >operador de redirecionamento redireciona a saída do programa para um arquivo. Sem argumentos, como você vê acima, >redireciona a saída padrão de um programa para um arquivo. cpbasicamente não faz nada mais chique do que

    cat source > destination
    

    (onde catapenas lê um arquivo e o imprime em stdout). pvé como cat, mas se você redirecionar seu fluxo de saída para outro lugar, ele imprimirá informações de progresso para stdout.

    Dê uma olhada man pvpara saber mais sobre isso.


    Outra opção, como o texto alternativoDoR sugere nesta resposta , é usar o rsync:

    $ rsync -ah --progress source-file destination-file
    sending incremental file list
    source-file
            621.22M  57%  283.86MB/s    0:00:01
    

    Isso preservará as permissões/propriedade dos arquivos enquanto mostra o progresso.

    • 383
  2. bartekbrak
    2012-10-16T00:06:08+08:002012-10-16T00:06:08+08:00

    Não há. Veja aqui o porquê. Embora faça mais do que você precisa, rsynctem um --progressparâmetro. O -airá manter as permissões, etc, e -hserá legível por humanos.

    rsync -ah --progress source destination
    

    A saída será algo como isto:

    Pictures/1.jpg
          2.13M 100%    2.28MB/s    0:00:00 (xfr#5898, to-chk=1/5905)
    Pictures/2.jpg
          1.68M 100%    1.76MB/s    0:00:00 (xfr#5899, to-chk=0/5905)
    
    • 377
  3. user76204
    2012-10-16T03:09:12+08:002012-10-16T03:09:12+08:00

    Se você quiser ver se seus arquivos estão sendo transferidos corretamente, você pode usar gcpe gcpé como cp, mas por padrão fornece uma barra de progresso para que você possa ver o que está sendo copiado. Como o wiki do programa observa , gcppossui vários recursos úteis, como

    • indicação de progressão de transferência
    • cópia contínua em caso de erro (pule para o próximo arquivo)
    • copy status logging: o gcp registra todas as suas ações para que seja possível saber quais arquivos foram copiados com sucesso
    • desfiguração de nomes para lidar com as limitações do sistema de arquivos de destino (por exemplo, exclusão de caracteres incompatíveis "*" ou "?" em FAT)

    No entanto, mesmo quando a barra de progresso atingir 100% ao usar a ferramenta, você deve esperar até que o prompt do terminal reapareça antes de remover a mídia com segurança para garantir que o processo de transferência tenha sido concluído com êxito.

    gcpé usado para copiar arquivos e tem opções como --preservepara que vários atributos e permissões possam ser preservados e --recursivepara que diretórios inteiros possam ser copiados. Mais informações sobre suas opções podem ser encontradas entrando man gcpou acessando as páginas de manual do Ubuntu online . Um tutorial também está disponível neste site .

    Instale gcpa partir dos repositórios com

    sudo apt-get install gcp
    

    ( Nota : no Ubuntu 12.10 o novo ponto de automount é, por exemplo, /media/user/usbdisk)

    Você pode copiar um arquivo para sua mídia digitando

    gcp /home/mike/file.mp4 /media/usb
    

    e copie uma pasta para sua mídia com

    gcp -rv ~/Podcasts /media/Mik2
    

    Exemplo de saída gcpcom a barra de progresso:

    gcp ~/Videos_incIplayer/mars.flv /media/Mik2
    Copying 168.57 MiB 100% |########################################################|   7.98 M/s Time: 00:00:22
    

    É claro que você pode especificar vários arquivos ou pastas para copiar para o seu disco, e há muitas outras opções cobertas no man gcp.

    • 111
  4. mathemagician
    2013-02-03T01:00:54+08:002013-02-03T01:00:54+08:00

    Eu gosto de usar cURL para esse propósito exato. A página man lista o protocolo "FILE" como suportado, então use-o como qualquer outro protocolo em uma URL:

    curl -o destination FILE://source
    

    Velocidade, progresso, tempo restante e muito mais - tudo em um formato familiar.

    • 103
  5. Nathaniel A Malinowski
    2016-09-27T14:35:22+08:002016-09-27T14:35:22+08:00

    Existe uma ferramenta chamada progressnos repositórios que é capaz de examinar vários comandos diferentes e exibir informações de progresso para eles.

    Instale-o usando o comando

    sudo apt-get install progress
    

    Esta ferramenta pode ser usada assim:

    cp bigfile newfile & progress -mp $!
    

    Resultado:

    [11471] cp /media/Backup/Downloads/FILENAME.file 
            29.9% (24.2 MiB / 16 MiB)
    
    • 53
  6. Ubuntourist
    2010-12-15T09:17:15+08:002010-12-15T09:17:15+08:00

    Embora não exiba velocidade, ao copiar vários arquivos, a -vopção do cpcomando fornecerá informações de progresso. por exemplo

    cp -rv old-directory new-directory
    
    • 38
  7. Jürgen Weigert
    2014-02-26T06:34:32+08:002014-02-26T06:34:32+08:00

    O kernel conhece a maioria dos dados, como velocidade e, muitas vezes, também porcentagem. Os kernels modernos expõem isso por meio de seu sistema de arquivos /proc.

    showspeed de https://github.com/jnweiger/showspeed usa essa informação. Ele pode ser anexado a programas já em execução e fornecer atualizações periódicas como esta:

    $ dd if=bigfile of=/tmp/otherbigfile &
    $ showspeed dd
    dd looks like a process name. pid=4417 matches av0=dd.
    p/4417/fd/0r /home/jw/bigfile 113MB/s (12%, 2.3GB)  9m:35
    p/4417/fd/1w /tmp/otherbigfile 182MB/s (2.6GB)
    p/4417/fd/0r /home/jw/bigfile 285MB/s (15%, 3.0GB)  8m:08
    p/4417/fd/0r /home/jw/bigfile 115MB/s (16%, 3.2GB)  8m:01
    p/4417/fd/0r /home/jw/bigfile 107MB/s (17%, 3.4GB)  7m:39
    p/4417/fd/1w /tmp/otherbigfile 104MB/s (3.5GB)
    p/4417/fd/0r /home/jw/bigfile 139MB/s (19%, 3.7GB)  7m:37
    p/4417/fd/0r /home/jw/bigfile 116MB/s (20%, 3.9GB)  7m:18
    p/4417/fd/1w /tmp/otherbigfile  67MB/s (4.0GB)
    p/4417/fd/1w /tmp/otherbigfile 100MB/s (4.1GB)
    ...
    
    • 20
  8. onemach
    2013-01-06T00:08:23+08:002013-01-06T00:08:23+08:00

    Enquanto pvpode lidar com cptarefas locais, usar ddwith pvpode lidar com tarefas locais ( cp) e remotas ( scp).

    dd if=path/to/source.mkv | pv | dd of=path/to/dest.mkv
    

    Garanta as path/to/dest.mkvsaídas portouch path/to/dest.mkv

    Isso pode mostrar o progresso, mas se você quiser as informações de porcentagem,

    dd if=path/to/source.mkv | pv -s 100M | dd of=path/to/dest.mkv
    

    Substitua 100Macima pelo tamanho real do seu arquivo de origem.

    Aí vem a parte remota

    Embora scpdificilmente possa mostrar o progresso atual, usar ddwith pvé muito fácil.

    ssh onemach@myotherhost dd if=path/to/source.mkv | pv -s 100M | dd of=path/to/dest.mkv
    
    • 14
  9. S Lentz
    2016-03-03T14:22:49+08:002016-03-03T14:22:49+08:00

    Se você tiver o rsync 3.1 ou superior ( rsync --version), poderá copiar (cp -Rpn) preservando permissões e propriedade, diretórios recursivos, "sem clobber" e exibir o progresso geral (em vez de apenas o progresso por arquivo), taxa de cópia e ( muito áspero) tempo estimado restante com:

    sudo rsync -a --info=progress2 --no-i-r /source /destination
    

    Observe que o sudo só é necessário se estiver lidando com diretórios/arquivos que você não possui. Além disso, sem o --no-i-r, a porcentagem pode ser redefinida para um número menor em algum momento durante a cópia. Talvez as versões posteriores do rsync sejam padronizadas para no-ir com info=progress2, mas isso não acontece na versão atual do 3.1.2.

    Descobri que a porcentagem e o tempo restantes são superestimados grosseiramente ao copiar para um diretório que já contém arquivos (ou seja, como quando você normalmente usaria cp -n "no clobber").

    • 12
  10. Ciro Santilli OurBigBook.com
    2016-09-15T08:18:56+08:002016-09-15T08:18:56+08:00

    dd status=progress

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

    dd if=src of=dst status=progress
    

    O terminal mostra uma linha do tipo:

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

    que é atualizado regularmente.

    Veja também: Como você monitora o progresso do dd?

    • 11

relate perguntas

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Como adicionar um diretório ao PATH?

    • 17 respostas
  • Marko Smith

    Como listar todos os pacotes instalados

    • 24 respostas
  • Marko Smith

    Como faço para obter a temperatura da CPU?

    • 21 respostas
  • Marko Smith

    Como posso adicionar um usuário como um novo sudoer usando a linha de comando?

    • 7 respostas
  • Marko Smith

    Alterar permissões e propriedade da pasta

    • 9 respostas
  • Marko Smith

    Como você reinicia o Apache?

    • 13 respostas
  • Marko Smith

    Como posso desinstalar o software?

    • 11 respostas
  • Marko Smith

    Como os PPAs podem ser removidos?

    • 26 respostas
  • Martin Hope
    justingrif Como adicionar um diretório ao PATH? 2009-07-23 12:42:23 +0800 CST
  • Martin Hope
    NES Como habilitar ou desabilitar serviços? 2010-12-30 13:03:32 +0800 CST
  • Martin Hope
    Ivan Como listar todos os pacotes instalados 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    Olivier Lalonde Como manter os processos em execução após encerrar a sessão ssh? 2010-10-22 04:09:13 +0800 CST
  • Martin Hope
    David B Como posso adicionar um usuário como um novo sudoer usando a linha de comando? 2010-10-16 04:02:45 +0800 CST
  • Martin Hope
    Hans Como removo versões antigas do kernel para limpar o menu de inicialização? 2010-08-21 19:37:01 +0800 CST
  • Martin Hope
    David Barry Como determino o tamanho total de um diretório (pasta) na linha de comando? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher "Os seguintes pacotes foram retidos:" Por que e como resolvo isso? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford Como os PPAs podem ser removidos? 2010-07-30 01:09:42 +0800 CST

Hot tag

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve