O Terminal exibirá uma barra de progresso quando copiar com "cp"?


33

É possível exibir uma barra de progresso ao copiar arquivos no Terminal usando o cp?


2
... você também pode considerar o uso rsync.
— Asmus

Existe uma maneira de fazer isso com uma barra de progresso geral sem instalar ferramentas de terceiros? Talvez um script ou algo assim?
— precisa saber é o seguinte

Respostas:


49

Você pode usar o rsync.

rsync --progress /copy/from /copy/to

1
Speedwise, que é mais rápido, rsync ou cp?
— Daviesgeek

Se todos os arquivos copiados não existirem no destino, acho que não haverá uma diferença perceptível. Se alguns dos arquivos existirem no destino, isso variará porque o rsync faz alguma verificação. O Rsync geralmente (mas nem sempre) será mais rápido nesse caso.
— bahamat

2
O uso rsync -P /copy/from /copy/toé equivalente ao rsync --partial --progress /copy/from /copy/toque exibirá o progresso da cópia, além de retomar a transferência se ela estiver desconectada.
— precisa saber é o seguinte

E, assim como o cp, ele precisa da -rbandeira para não pular diretórios
— Alexander - Restabelecer Monica

21

Durante cp, CtrlTexibe a porcentagem atual (pelo menos no macOS)


Fantástico!
— Felix021 13/0618

1
A razão pela qual isso funciona é porque Ctrl-tenvia SIGINFOsinais da mesma maneira que Ctrl-cenvia SIGINTsinais. Você pode, por exemplo, usar um loop em outro shell para repetidamente kill -INFOo processo em questão, se não quiser continuar pressionando as teclas. Por ser um sinal, ele também funciona com outros utilitários, por exemplo dd. Ctrl-te SIGINFOsão herdados do BSD.
— HTNW 03/09/19

1

Se você estiver copiando arquivos grandes ou diretórios usando o cp, poderá abrir o 'Activity Monitor', ir para a guia 'Disk' e procurar o processo 'cp'. Aqui você pode acompanhar quantos bytes foram gravados desde a última inicialização, fornecendo uma idéia aproximada do progresso. (OS X 10.10).

Espero que ajude!


0
#!/bin/sh
   strace -q -ewrite cp -- "${1}" "${2}" 2>&1 \
      | awk '{
        count += $NF
            if (count % 10 == 0) {
               percent = count / total_size * 100
               printf "%3d%% [", percent
               for (i=0;i<=percent;i++)
                  printf "="
               printf ">"
               for (i=percent;i<100;i++)
                  printf " "
               printf "]\r"
            }
         }
         END { print "" }' total_size=$(stat -c '%s' "${1}") count=0

Não é perfeito, mas funciona ... coloque isso em um caminho de diretório e dê um nome semelhante.


Espere ... como faço para que isso funcione ???
— daviesgeek

2
Não me lembro se o OS X tinha um stracecomando no momento em que essa resposta foi escrita (julho de 2011), mas definitivamente não existe hoje.
— Tim Ruddick

Alguma idéia de como executar isso no macOS?
— rraallvv
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.