É possível ver a velocidade do cp e a porcentagem copiada?
251
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 mostram o% copiado e também a velocidade de transferência.
Você poderia usar em rsyncvez de cp. Tem uma --progressopção
Frostschutz
2
Midnight Commandertambém funciona bem e possui uma interface de usuário bonita baseada em texto com barras de progresso, mas pode não estar instalada. Tente mcno prompt de comando. Além disso, obviamente, não é cp.
um CVn 17/02
3
Usar rsynccom --progressapenas me fez descobrir o que está acontecendo. Ele fica preso quando atinge os 100% e, em seguida, dura alguns minutos. Eu acho que é o mesmo que está acontecendo com o nautilus. De qualquer forma, essa já é outra questão; portanto, a melhor resposta para essa pergunta é rsync --progress: mostra tamanho,%, velocidade e tempo decorrido.
yzT 17/02
2
Um problema com o rsync é que ele é executado mais lentamente que uma cópia pura. No meu grande servidor, a diferença é de 60 MB / se 300 MB / s, respectivamente.
Pdwalker #
1
@pdwalker mesmo com a -Wopção? em todos os meus hosts rsyncé quase tão rápido quanto cp... tão perto que uso regularmente em rsyncvez de cp.
Skaperen
Respostas:
193
rsynctem um sinalizador chamado progress2que mostra a porcentagem geral:
--info = progress2 ainda não o transformou em um repositório padrão e aqui está 2015. Parece uma boa idéia.
Lonniebiz
1
--info=progress2finalmente incluído version 3.1.0 protocol version 31. Talvez você possa editar sua resposta, yzT.
Sopalajo de Arrierez
1
Percebi --info=progress2que o rsync está super rápido! 200 MB / s, enquanto o Windows não vai além de 90 MB / s!
ReneFroger
1
@ReneFroger, embora essa possa ser a velocidade real (dependendo do dispositivo), geralmente no Linux essa velocidade é realmente falsa e, após a conclusão da cópia, o sistema ainda está gravando no dispositivo, ao contrário do Windows em que você pode ejetar o dispositivo quase imediatamente. Se você copiar arquivos grandes, poderá observar como ele começa nessa velocidade rápida, mas diminui até o padrão.
yzT 29/06
7
funcionou para mim com apenas --progress. rsync versão 3.0.9
adrianTNT
103
Se você permitir outras ferramentas que cpnão sejam certamente possíveis. Para um único arquivo você pode usar pv. É uma pequena ferramenta que fornece estatísticas agradáveis.
pv inputfile > outputfile
Se você possui vários arquivos ou diretórios, pode usar o tar:
tar c sourceDirectory | pv | tar x -C destinationDirectory
Você pode envolvê-lo em uma função shell. É menos para digitar e você obtém semânticas próximas das 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 tardo não suportam a sintaxe mencionada (por exemplo, Solaris tar) e você deve usar a seguinte variante:
Isso lhe dará velocidade de transferência, mas não o ETA, porque pvnão sabe quantos dados serão enviados pelo canal. Você pode especificar isso usando -s. Por exemplo, primeiro fazer du -sh sourceDirectorypara ter uma idéia (áspero), e, em seguida, passá-lo para pv, assim: pv -s 100m.
Jan Fabry
1
--info = progress2 fornece estatísticas de progresso no nível do diretório.
AlexLordThorsen
vbuf(debian, ubuntu) é um pouco mais rápido que pv, provavelmente por causa de seu buffer de anel virtual
Skaperen
@ Skaperen eu não sei vbuf. Mas, como parece, o Debian é instável no momento e, portanto, frequentemente não está disponível em servidores que normalmente executam o Debian stable.
Marco
58
rsync funciona melhor para mostrar o progresso durante o processo de cópia.
Conforme 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.
Essa ferramenta pode ser descrita como um comando Tiny Dirty Linux Only * C que procura os comandos básicos do coreutils (cp, mv, dd, tar, gzip / gunzip, cat, ...) atualmente em execução no sistema e exibe a porcentagem de cópias dados.
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
Corre:
export FORCE_UNSAFE_CONFIGURE=1
./configure
make
Copie os dois arquivos cpe mvloacated sob coreutils-8.21/src/a /usr/local/bin:
Percebeu que essa postagem era um pouco antiga. Mas, como fiz uma solução para o problema em questão, pensei em publicar minha solução.
Cenário: Como temos uma estrutura de diretórios muito grande que queremos copiar, emitimos o comando cp -R sourcedir destdir em uma janela do terminal.
Abra outra janela do terminal ou coloque o processo em segundo plano (Ctrl+Z,bg<CR>), então vamos fazer um indicador de progresso da maneira 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 n pelo resultado obtido na variável sourceize. Depois de inserir o sourcesize 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:
Estou ciente de que esta solução não abordou a velocidade da cópia, mas seria possível adicionar isso expandindo os comandos acima, possivelmente transformando-o em um script bash para facilitar a leitura. Por exemplo, verificando a quantidade de dados copiados por pr. Na unidade de tempo, a velocidade deve ser trivial para calcular e exibir.
Isso é realmente perfeito para o meu caso de uso, então obrigado por publicá-lo! Quero saber sobre o progresso de copiar um diretório enorme com milhares de arquivos, não apenas um, para que as outras soluções não me ajudem.
Ibrahim
Isso é ótimo, especialmente em casos como o que estou enfrentando agora: remotamente, iniciei um enorme trabalho de MV para mover terrabytes de backups de um pool de armazenamento para outro, sem pensar nas implicações de antemão. Agora eu posso facilmente colocar o processo em segundo plano e dar uma espiada nele. Impressionante!
Riley
8
Para melhorar a resposta de Marco, hoje escrevi esta versão do cpstat, para que você possa 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 fonte, 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 - )
;}
Outra solução simples é apenas observar a pasta de saída da seguinte maneira:
Linux / Cygwin:watch -n 10 --differences du -sk --apparent-size <WATCHED_FOLDER>
FreeBSD:gnu-watch -n 10 --differences du -sk <WATCHED_FOLDER>
Este utilitário prático será executado due destacará as diferenças.
Uma outra solução em potencial seria escrever um script simples que faça um loop, chamando due cuspindo uma estimativa aproximada da taxa de transferência.
Essa ferramenta é um comando do utilitário Linux que procura os 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:
Acabei de ter um caso em que o cp estava mais ou menos bloqueado devido a um bug do FUSE no sistema de arquivos receptor.
Se você não pode simplesmente mudar do cp (ou seja, porque --sparse = always) e quer algo que seja realmente confiável para o progresso, vá por / proc.
VCP - copia arquivos em uma interface de maldições (Mostrar a barra de progresso no Linux).
DESCRIÇÃO: vcp copia arquivos e diretórios em uma interface de maldições, com apenas texto disponível. suas opções e saída são semelhantes ao cp do BSD ao adicionar alguns novos recursos.
Ele fornece informações sobre:
arquivos copiados e deixados para copiar
dados gravados e tamanho total dos dados
dados sendo gravados a cada segundo
duas barras de status, uma mostrando o status atual do arquivo, o outro status total (exceto com 1 arquivo, ambos mostram o atual) e porcentagem
rsync
vez decp
. Tem uma--progress
opçãoMidnight Commander
também funciona bem e possui uma interface de usuário bonita baseada em texto com barras de progresso, mas pode não estar instalada. Tentemc
no prompt de comando. Além disso, obviamente, não écp
.rsync
com--progress
apenas me fez descobrir o que está acontecendo. Ele fica preso quando atinge os 100% e, em seguida, dura alguns minutos. Eu acho que é o mesmo que está acontecendo com o nautilus. De qualquer forma, essa já é outra questão; portanto, a melhor resposta para essa pergunta érsync --progress
: mostra tamanho,%, velocidade e tempo decorrido.-W
opção? em todos os meus hostsrsync
é quase tão rápido quantocp
... tão perto que uso regularmente emrsync
vez decp
.Respostas:
rsync
tem um sinalizador chamadoprogress2
que mostra a porcentagem geral:fonte
--info=progress2
finalmente incluídoversion 3.1.0 protocol version 31
. Talvez você possa editar sua resposta, yzT.--info=progress2
que o rsync está super rápido! 200 MB / s, enquanto o Windows não vai além de 90 MB / s!--progress
. rsync versão 3.0.9Se você permitir outras ferramentas que
cp
não sejam certamente possíveis. Para um único arquivo você pode usarpv
. É uma pequena ferramenta que fornece estatísticas agradáveis.Se você possui vários arquivos ou diretórios, pode usar o tar:
Você pode envolvê-lo em uma função shell. É menos para digitar e você obtém semânticas próximas das de
cp
. Aqui está uma função muito simples (e não à prova de erros!):Observe que algumas versões
tar
do não suportam a sintaxe mencionada (por exemplo, Solaristar
) e você deve usar a seguinte variante:Você chama assim
Você pode aprimorá-lo ainda mais, para
pv
fornecer uma estimativa do tempo restante.Outra solução (como frostschutz mencionado em um comentário) é usar o rsync com a
--progress
opção:fonte
pv
não sabe quantos dados serão enviados pelo canal. Você pode especificar isso usando-s
. Por exemplo, primeiro fazerdu -sh sourceDirectory
para ter uma idéia (áspero), e, em seguida, passá-lo parapv
, assim:pv -s 100m
.vbuf
(debian, ubuntu) é um pouco mais rápido quepv
, provavelmente por causa de seu buffer de anel virtualvbuf
. Mas, como parece, o Debian é instável no momento e, portanto, frequentemente não está disponível em servidores que normalmente executam o Debian stable.rsync
funciona melhor para mostrar o progresso durante o processo de cópia.ex:
fonte
Conforme 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.
Eu tenho usado nos últimos meses e é sólido.
fonte
Sim, é possível exibir o progresso do comando
cp
no terminal.Método # 1: (uso
progress
)Abra um novo terminal e digite:
progress
ele exibirá o progresso docp
comando 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 tiver instalado
progress
, você pode instalá-lo a partir do repositório, por exemplo, noCentOS
com este comando:yum -y install progress
.Depois que você executar o
cp
comando em segundo plano ou depois da execuçãocp
normal, abra outro terminal, então tente este comando:Veja a saída:
Método # 2: (use o patch
cp
)Ou faça o download do GNU
coreutils
e corrija-o.Corre:
Copie os dois arquivos
cp
emv
loacated sobcoreutils-8.21/src/
a/usr/local/bin
:Ou copie-o usando o gerenciador de arquivos como root
Adicione as seguintes linhas ao seu
~/.bashrc
:Logout e Login
A barra de progresso pode ser exibida sem o
–g
ou–progress-bar
conforme recomendado pelo autorVeja a saída:
Fonte: linuxhelp
fonte
cp
patch: web.archive.org/web/20131115171331/http://beatex.org/web/...progress
comandoPercebeu que essa postagem era um pouco antiga. Mas, como fiz uma solução para o problema em questão, pensei em publicar minha solução.
Cenário: Como temos uma estrutura de diretórios muito grande que queremos copiar, emitimos o comando cp -R sourcedir destdir em uma janela do terminal.
Abra outra janela do terminal ou coloque o processo em segundo plano
(Ctrl+Z,bg<CR>)
, então vamos fazer um indicador de progresso da maneira 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 n pelo resultado obtido na variável sourceize. Depois de inserir o sourcesize e o destdir (diretório de destino), execute o comando abaixo.
Isso imprimirá o progresso a cada 10 segundos com mensagens como:
Estou ciente de que esta solução não abordou a velocidade da cópia, mas seria possível adicionar isso expandindo os comandos acima, possivelmente transformando-o em um script bash para facilitar a leitura. Por exemplo, verificando a quantidade de dados copiados por pr. Na unidade de tempo, a velocidade deve ser trivial para calcular e exibir.
fonte
Para melhorar a resposta de Marco, hoje escrevi esta versão do
cpstat
, para que você possa 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 fonte, poderá, graças atar
, criar automaticamente a mesma árvore de diretórios dependente.fonte
Não está em uma versão padrão do
cp
.Você pode colocar em segundo plano o cp e listar o tamanho enquanto aguarda
cp
a conclusão.Eu uso esse perl para monitorar o crescimento de um único arquivo, mas ele é executado externamente no cp (ou o que mais eu estiver fazendo)
fonte
Eu achei isso para usar, funcionou muito bem:
de um comentário de Mike sobre a questão de como verificar o progresso da execução do cp
fonte
Apesar de
rsync
fornecer algumas estatísticas de progresso, se você quiser uma barra de progresso, usepv
.Você pode usar
cpv
um wrapper parapv
uma sintaxe mais fácil, mais semelhante àcp
que você pode usar para copiar recursivamente diretóriosVocê pode obtê-lo aqui
fonte
pv
. Bom achado!Usar uma ferramenta como
mc
(comandante da meia-noite) pode ser uma boa opção alternativa para outras respostas.É um gerenciador de arquivos simples que mostra você copiar / mover o progresso.
fonte
dd status=progress
Opção adicionada no GNU Coreutils 8.24+ (Ubuntu 16.04):
Stdout é uma linha atualizada periodicamente como:
Veja também: Como você monitora o progresso do dd? | Ask Ubuntu
fonte
Outra solução simples é apenas observar a pasta de saída da seguinte maneira:
Linux / Cygwin:
watch -n 10 --differences du -sk --apparent-size <WATCHED_FOLDER>
FreeBSD:
gnu-watch -n 10 --differences du -sk <WATCHED_FOLDER>
Este utilitário prático será executado
du
e destacará as diferenças.Uma outra solução em potencial seria escrever um script simples que faça um loop, chamando
du
e cuspindo uma estimativa aproximada da taxa de transferência.fonte
Essa ferramenta é um comando do utilitário Linux que procura os 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:
https://github.com/Xfennec/cv
fonte
Acabei de ter um caso em que o cp estava mais ou menos bloqueado devido a um bug do FUSE no sistema de arquivos receptor.
Se você não pode simplesmente mudar do cp (ou seja, porque --sparse = always) e quer algo que seja realmente confiável para o progresso, vá por / proc.
fonte
Página do manual da VCP: https://linux.die.net/man/1/vcp
Faça o download de vcp-2.2.tar.gz em:
http://distfiles.gentoo.org/distfiles/vcp-2.2.tar.gz
Dependência: curses.h (libncurses-dev).
No Ubuntu, instale:
ou
INSTALAR vcp:
Manual:
fonte