É possível exibir o progresso da transferência dos dados, à medida em que são copiados no Linux/Unix com o uso do comando de cópia, cp?
A resposta curta é não.
Porém, através de um hack (que vou ensinar neste artigo), é possível fazer cópias de todos os arquivos de um diretório (recursivamente, se você quiser) para outro, com a exibição do progresso da cópia de cada arquivo.
Se estivermos falando de arquivos muito grandes (áudio, vídeo etc.) será possível acompanhar melhor o processo de cópia na CLI (linha de comando).
Vamos ver como realizar o procedimento com o uso destas 2 ferramentas padrão em qualquer distro GNU/Linux: alias e rsync.
O comando rsync serve para fazer cópias entre diretórios locais e remotos.
Com ele é possível obter um retorno sobre a taxa de progresso da cópia de dados.
Por exemplo, para copiar todos os arquivos da pasta Documentos para /media/justincase/pendrive, use o comando assim:
rsync -ahu --progress Documentos/* /media/justincase/pendrive/
Veja o que o comando faz:
-a
— estabelece que a transferência ocorra no nível de arquivo.-h
— human readable, indica que o retorno deve ocorrer em Kb/Mb, para tornar a leitura mais fácil.-u
— update, atualiza apenas os arquivos com entradas mais novas, para agilizar o processo. O rsync já faz a cópia incremental, por padrão — ou seja, verifica antes se os arquivos já existem no destino e só copia se houve atualizações.--progress
— finalmente, esta é a opção de exibição do progresso da execução da transferência individual da cópia.
Para adicionar recursividade, use a opção ‘-r’:
rsync -ahur --progress Documentos/* /media/justincase/pendrive/
Fique à vontade para alterar os itens da linha de comando, para que ela se encaixe às suas necessidades.
Por fim, altere a função do comando cp, no seu sistema, com o uso do alias:
alias cp="rsync -ahu --progress"
Se preferir que a função de recursividade fique em um comando separado, crie um novo alias:
alias cpr="rsync -ahur --progress"
Veja um exemplo de funcionamento do “novo” cp:
cp ~/Documentos/Documento\ digitalizado* /media/justincase/b655b449-21c6-42ca-b274-5adf9980a843/Documentos/
sending incremental file list
Documento digitalizado-1.jpg
953.79K 100% 48.80MB/s 0:00:00 (xfr#1, to-chk=11/12)
Documento digitalizado-1.jpg.zip
917.61K 100% 15.63MB/s 0:00:00 (xfr#2, to-chk=10/12)
Documento digitalizado-1.png
7.40M 100% 43.27MB/s 0:00:00 (xfr#3, to-chk=9/12)
Documento digitalizado-2.jpg
407.14K 100% 2.03MB/s 0:00:00 (xfr#4, to-chk=8/12)
Documento digitalizado-2.jpg.zip
354.94K 100% 1.74MB/s 0:00:00 (xfr#5, to-chk=7/12)
Documento digitalizado-2.png
483.23K 100% 2.06MB/s 0:00:00 (xfr#6, to-chk=6/12)
Documento digitalizado-3.jpg
318.37K 100% 1.22MB/s 0:00:00 (xfr#7, to-chk=5/12)
Documento digitalizado-3.jpg.zip
309.96K 100% 1.17MB/s 0:00:00 (xfr#8, to-chk=4/12)
Documento digitalizado-3.png
482.62K 100% 1.64MB/s 0:00:00 (xfr#9, to-chk=3/12)
Documento digitalizado-pgto-helio20140513.pdf
112.15K 100% 359.08kB/s 0:00:00 (xfr#10, to-chk=2/12)
Documento digitalizado.jpg
30.82K 100% 96.76kB/s 0:00:00 (xfr#11, to-chk=1/12)
Documento digitalizado.png
7.40M 100% 16.79MB/s 0:00:00 (xfr#12, to-chk=0/12)
Segue um exemplo de uma variação do uso do rsync, que inclui a opção ‘–info=progress2’:
rsync -ah --info=progress2 ~/Documentos/Documento\ digitalizado* /media/justincase/b655b449-21c6-42ca-b274-5adf9980a843/Documentos/
19.16M 100% 192.03MB/s 0:00:00 (xfr#12, to-chk=0/12)
Neste caso, os dados sobre o progresso se referem à tarefa toda e não apenas a cada arquivo individualmente.
Você pode criar um alias para este modo de operação, se quiser.
2 replies on “Como copiar arquivos na linha de comando com exibição do progresso”
Muito bom saber do –info=progress2 mas ele só foi implementado a partir da versão 3.1.0 do rsync. Então antes de testar alguns parâmetros, é bom checar a versão “rsync –version”
Bem lembrado.