Eu preciso copiar arquivos enormes em minha máquina Linux.
Exemplo:
cp source.txt target.txt
Desejo criar uma barra de progresso que mostre essa cópia ainda em andamento em cada arquivo de cópia
Exemplos"
cp file file1
copiar arquivo > arquivo1 .........
cp moon mars
copiar lua > marte .......
Resumindo, você não encontrará
cp
funcionalidade nativa para a saída da barra de progresso. Por quê? Muitas razões . No entanto, você tem algumas opções:Use uma ferramenta diferente.
rsync
, conforme mencionado por @ user1404316 tem--progress
:Se você não precisa da semântica extra
cp
,rsync
crie um novo arquivo compv
("Pipe Viewer") redirecionandostdout
:Se você precisar de semântica extra, poderá usar
progress
, embora não forneça a barra especificamente. Ele se anexa a processos já em execução , então você o invocaria como:Outra opção é
gcp
, que faz exatamente o que você solicitou com uma barra de progresso:Outra opção abusa
curl
da capacidade de lidar comfile://
urls:Você pode escrever um script de shell
rsync
é um programa de cópia que possui ótimos recursos para copiar arquivos enormes, incluindo um--progress
recurso, e possui uma forma de compactação em trânsito para reduzir os dados em trânsito (e assim economizar tempo para a cópia):rsync
também possui recursos para retomar uma cópia que foi interrompida, talvez devido a uma desconexão da rede. Você precisaria iniciá-lo com opções--partial --append-verify
. A única desvantagem que posso pensar em usarrsync
para copiar em uma rede é que ele precisa ter sido instalado em ambos os computadores, ou seja. o remetente e o destinatário. Veja suaman
página para detalhes e todos os seus outros recursos...Se você não pode instalar
rsync
por algum motivo, ou não quer, uma boa alternativa simples épv
, um comando pipe viewer , que faz exatamente o que você está pedindo.pv
também inclui muitas opções de visualização. Veja suaman
página para todos os presentes disponíveis. Aqui estão algumas das opções comumente usadas: