Ao mover diretórios grandes usando mv
, existe uma maneira de visualizar o progresso (%)? O cp
comando no gentoo tinha uma -g
opção que mostrava o progresso.
command-line
mv
progress-information
letronje
fonte
fonte
Respostas:
Você pode criar um cp e mv com patches, os quais suportam a opção -g para mostrar o progresso. Existem instruções e correções nesta página . No entanto : a página instrui você a fazer
que substitui o cp e o mv originais. Isso tem duas desvantagens: primeiro, se um pacote coreutils atualizado chegar ao seu sistema, eles serão substituídos. Em segundo lugar, se a versão corrigida tiver um problema, eles poderão interromper os scripts que dependem do cp e mv padrão. Prefiro fazer algo assim:
que copia os arquivos para / usr / local / bin, destinado aos programas compilados pelo usuário, e fornece um nome diferente. Então, quando você quer uma barra de progresso, diz
mvg -g bigfile /mnt/backup
e usa mv normalmente.Além disso, você pode fazer
alias mvg="/usr/local/mvg -g"
isso, basta dizermvg bigfile /mnt/backup
e obter diretamente a barra de progresso.fonte
Não gosto da idéia de substituir binários do coreutil quando houver soluções mais simples, então aqui estão as minhas:
rsync : o Rsync copia arquivos e possui uma
-P
opção para uma barra de progresso. Portanto, se você tiver o rsync instalado, poderá usar um alias simples em seu shells dotfile:A desvantagem é que o rsync é um pouco mais lento que o cp, mas você deve medir isso com o tempo e decidir por si próprio, eu posso viver com ele :-)
Script de shell : um script de shell também pode criar a barra de progresso. Eu encontrei isso há um tempo atrás na rede e não me lembro da fonte:
Será parecido com:
bar :
bar
é um pequeno script de shell para exibir uma barra de processos para todos os tipos de operações (cp, tar, etc.). Você pode encontrar exemplos na página inicial do projeto.Também é escrito para a casca de bourne, por isso funcionará nas proximidades em qualquer lugar.
fonte
bar
ainda não quebramv
.rsync
não substituimv
(o OP está perguntando) completamente, especialmente quando se trata de cópias rápidas em sistemas de arquivos de copiar em gravar comobtrfs
.Existe uma nova ferramenta chamada
progress
que pode encontrar qualquer descritor relacionado a um comando em execução e mostrar progresso e velocidade: disponível aquigera estatísticas para todas as operações cp, mv etc. em execução
fonte
progress
após a instalação e ele me apresentou o progresso domv
comando que eu estava esperando no momento. Obrigado!sudo
(mesmo usuário eu acho) - você também pode usarwatch
para dizer o que está acontecendo a cada 2 segundos:watch progress -w
watch progress -w
você também pode simplesmente usarprogress -m
Você pode usar o comando visualizador de tubulação
pv
para mostrar a barra de progresso:Costumo usar isso para copiar um arquivo grande em um sistema de arquivos de rede montado (combinar com
gzip
etar
). A desvantagem é que você pode copiar apenas um arquivo e não o diretório. E você deve dar um nome ao novo arquivo, não pode apenas dar o diretório de destino comocp
faz. No entanto, copiar nãopv
é o objetivo. É uma ferramenta poderosa e faz muito mais do que apenas copiar arquivos. Veja a página inicial para mais exemplos depv
.Uma opção muito melhor é usar
rsync -aP
. Se desejarmv
, acrescente a bandeira--remove-source-files
. Adicione isso ao seu.bashrc
se desejar usar os comandos com freqüência:A desvantagem aqui é que o rsync mostra apenas o progresso, não uma barra de progresso.
fonte
tar cf - source-dir | pv | tar xf - -C out-dir
fornecerá o rendimento de um diretório inteiro. Se você conhece o tamanho e passa-s
para pv, também pode progredir.Se seu objetivo é mover / copiar um diretório com barra de progresso, mas evitando a GUI não terminal, o mc (Midnight Commander) é uma boa opção.
fonte
Minha solução é usar
rsync
. Ele pode copiar diretórios, remover os arquivos de origem após uma cópia bem-sucedida (assim "movê-los") e exibir relatórios de progresso, entre muitos outros recursos (principalmente a sincronização de diretórios parcialmente copiados e o trabalho na rede).Aqui está como eu moveria um diretório com o rsync, com o relatório de progresso:
Certifique-se de
$src
que não termine com uma barra invertida, caso contrário, você terá um significado diferente do GNUcp
.O
rm -r
final é necessário porque--remove-source-files
apenas remove os arquivos de origem, depois que cada um é copiado com êxito, não os diretórios. O&&
certifica-se de executá-lo somente se o rsync for concluído com êxito. Se você é paranóico, pode substituí-lo por algum tipo de recursivarmdir
, comofind $src -d -exec rmdir {} +
A única falha é que a
-P
opção mostra o progresso de cada arquivo, não de toda a operação de cópia. Isso pode ser inútil se você estiver tentando mover um diretório com muitos arquivos minúsculos. A versão de desenvolvimento mais recente do rsync possui um sinalizador alternativo--info=progress2
que mostra o progresso de toda a operação.fonte
Para evitar coreutil patch para adicionar barra de progresso para
mv
ecp
,gcp
(copiador de Goffi) é uma nova alternativa: http://wiki.goffi.org/wiki/Gcp/enUsar da mesma maneira que
cp
nas opções-r
de recursividade e-v
verbosidade.Ele usa uma fila de arquivos quando vários comandos são invocados simultaneamente. Ele também permite gravar nomes de arquivos copiados em um log; consulte a seção Página de manual de economia de fonte para obter detalhes.
Aqui está um bom tutorial para começar
gcp
: http://mylinuxbook.com/gcp-advanced-command-line-file-copier-inspired-by-cp/fonte
Primeiro: nunca copio arquivos grandes sem usar o ionice, a menos que saiba que não desejarei usar o computador por meia hora ou mais.
Segundo: todas as minhas partições estão organizadas, de modo que a cópia intrapartição não leva tempo. Se for uma cópia longa, faço um
du -sm
nos arquivos edf -m | grep copy_to_partition
. Então, se estiver curioso quanto tempo levará, eu façodf
novamente e vejo quanto dos arquivos foram copiados.fonte
No meu Mint, eu gosto de usar o gcp nesta ou na solução curl (o que é muito bom)
Pode ser necessário instalá-lo
sudo apt-get install gcp
E uma tarefa muito agradável e excelente para a barra de progresso com informações sobre
em um bom formato legível é:
Além disso, pode ser necessário instalá-lo primeiro
sudo apt-get install curl
fonte
gcp
não suporta a movimentação de arquivos, ou seja, os arquivos de origem precisam ser removidos manualmente após a cópia bem-sucedida.Isso não fornece uma barra de progresso, mas pressione
CTRL-T
e você enviará umSIGINFO
paramv
, que informará em qual arquivo está trabalhando e qual o andamento do processo. É bastante útil ter isso para grandes transferências de arquivos, possivelmente não tão útil para uma transferência com muitos arquivos pequenos.Exemplo rápido:
fonte
INFO: unknown signal; killall -l lists signals.
que o SIGINFO é apenas em alguns BSDs, não no POSIX padrão.Use
mv -v
para imprimir uma linha por arquivo movido epv -l
para imprimir o progresso com base na contagem de linhas (na contagem de arquivos com efeito).Você precisará
pv
(visualizador de tubulação): http://www.ivarch.com/programs/pv.shtmlUse o seguinte comando para obter a contagem de arquivos:
Este comando mostrará informações de progresso com base no número de arquivos copiados. Isso funciona melhor se houver muitos arquivos pequenos. Se houver apenas alguns arquivos enormes, você não se divertirá muito.
Observe que
mv
na mesma partição deve ser rápida.mv
para outra partição seria o mesmo quecp source target
seguido porrm source
. Então, aqui estão dois comandos para copiar diretórios com informações de progresso.para relatar o progresso com base no número de arquivos copiados:
para relatar o progresso com base nos bytes copiados:
Veja aqui para mais detalhes: informações de progresso via pv para cópia do diretório
fonte
Invariavelmente, acabo procurando por essa resposta depois de iniciar o comando 'mv', quando não quero iniciá-lo novamente. Se você estiver nessa situação, uma maneira muito simples de monitorar o progresso (ou para ver se está longe o suficiente para que não valha a pena matar) é executar:
Isso imprimirá apenas o tamanho do diretório para que você possa ver quantos dados foram copiados ou execute-o algumas vezes para ver a velocidade com que os dados estão sendo transferidos.
fonte