Caso contrário, existe algum utilitário alternativo de linha de comando que possa conseguir isso?
Caso contrário, existe algum utilitário alternativo de linha de comando que possa conseguir isso?
Respostas:
Embora cpnão tenha essa funcionalidade, você pode pvfazer isso:
pv my_big_file > backup/my_big_file
Nota: este método perderá as permissões e a propriedade do arquivo. Os arquivos copiados dessa maneira terão as mesmas permissões que se você os tivesse criado e pertencerão a você.
Neste exemplo, pvbasicamente apenas envia o arquivo para stdout *, que você redireciona para um arquivo usando o> operador Simultaneamente, ele imprime informações sobre o progresso no terminal quando você faz isso.
Isto é o que parece:
stefano@ubuntu:~/Data$ pv my_big_file > backup/my_big_file
138MB 0:00:01 [73.3MB/s] [=================================>] 100%
Pode ser necessário instalar o pv (como alternativa
sudo apt-get install pv) no seu sistema.
*: O bit técnico
Existem três fluxos de dados importantes em um sistema semelhante ao unix: stdout (saída padrão), stderr (erro padrão) e stdin (entrada padrão). Todo programa tem todos os três, por assim dizer. O >operador de redirecionamento redireciona a saída do programa para um arquivo. Sem argumentos, como você vê acima, >redireciona a saída padrão de um programa para um arquivo. cpbasicamente não faz nada mais sofisticado do que
cat source > destination
(onde catapenas lê um arquivo e o imprime no stdout). pvé como cat, mas se você redirecionar o fluxo de saída para outro lugar, ele imprimirá as informações de progresso no stdout.
Dê uma olhada man pvpara saber mais sobre isso.
Outra opção, como sugere o
DoR nesta resposta , é usar o rsync:
$ rsync -ah --progress source-file destination-file
sending incremental file list
source-file
621.22M 57% 283.86MB/s 0:00:01
Isso preservará as permissões / propriedade dos arquivos enquanto mostra o progresso.
alias cp="rsync -avz"cp está desatualizado.
pv, pode bisbilhotar /proc/PID of cp/fde /proc/PID of cp/fdinfodescobrir o progresso. (Depende de você inferir velocidade.) Eu uso essa técnica para assistir updatedb.
-zprovavelmente só deve ser usado para cópias em rede; compactar e descompactar os dados para uma cópia local é pura sobrecarga.
rsynccertifique-se de não adicionar à direita o /caminho de origem (ou remover se, por exemplo, a conclusão do bash o colocar automaticamente). Caso contrário, você obterá resultados diferentes dos do uso cp(ou gcp).
Não existe. Veja aqui o porquê. Embora faça mais do que você precisa, rsyncpossui um --progressparâmetro O -amanterá permissões, etc, e -hserá legível por humanos.
rsync -ah --progress source destination
A saída será mais ou menos assim:
Pictures/1.jpg
2.13M 100% 2.28MB/s 0:00:00 (xfr#5898, to-chk=1/5905)
Pictures/2.jpg
1.68M 100% 1.76MB/s 0:00:00 (xfr#5899, to-chk=0/5905)
-rsinalizador para recursar diretórios. Pode até ser um alias como um substituto direto para cp:alias cp="rsync -ah --progress"
--progressfaz minha cabeça girar 🙃, observando toda a saída exibida no terminal. Portanto, aqueles que vêm aqui das pesquisas de palavras-chave da AOL rsync -ah --info=progress2 [source] [destination] apresentam a saída de uma maneira um pouco mais saudável IM️ IMHO.
Se você deseja ver se seus arquivos estão sendo transferidos corretamente, você pode usar gcpe gcpé como o cp, mas, por padrão, fornece uma barra de progresso para que você possa ver o que está sendo copiado. Como observa o wiki do programa , gcppossui vários recursos úteis, como
- indicação de progressão de transferência
- cópia contínua em erro (pule para o próximo arquivo)
- registro de status de cópia: o gcp registra todas as suas ações para que seja possível saber quais arquivos foram copiados com sucesso
- manipulação de nome para lidar com as limitações do sistema de arquivos de destino (por exemplo, exclusão de caracteres incompatíveis "*" ou "?" no FAT)
No entanto, mesmo quando a barra de progresso atingiu 100% ao usar a ferramenta, você deve esperar até que o prompt do terminal reapareça antes de remover a mídia com segurança, para garantir que o processo de transferência tenha sido concluído com êxito.
gcpé usado para copiar arquivos e tem opções como, --preservepara que vários atributos e permissões possam ser preservados e --recursivepara que diretórios inteiros possam ser copiados. Mais informações sobre suas opções podem ser encontradas entrando man gcpou acessando as páginas de manual do Ubuntu online . Um tutorial também está disponível neste site .
Instale a gcppartir dos repositórios com
sudo apt-get install gcp
( Nota : no Ubuntu 12.10, o novo ponto de montagem automática é, por exemplo /media/user/usbdisk)
Você pode copiar um arquivo para sua mídia digitando
gcp /home/mike/file.mp4 /media/usb
e copie uma pasta para sua mídia com
gcp -rv ~/Podcasts /media/Mik2
Exemplo de saída gcpcom a barra de progresso:
gcp ~/Videos_incIplayer/mars.flv /media/Mik2
Copying 168.57 MiB 100% |########################################################| 7.98 M/s Time: 00:00:22
Obviamente, você pode especificar vários arquivos ou pastas para copiar para o seu disco, e há muitas outras opções abordadas man gcp.
dbus.exceptions.DBusException: org.freedesktop.DBus.Error.NotSupported: Unable to autolaunch a dbus-daemon without a $DISPLAY for X11
export DISPLAY=:0.0antes de iniciar o gcp. Se a máquina está sem cabeça, então você teria que começar um xsession em um framebuffer virtual ou algo, nesse ponto você provavelmente deve apenas olhar para outro programa
gcpé bastante decente, mas o requisito DBUS / X é estranho. Eu lidei com isso através do SSH usando o encaminhamento ssh: ssh -X user@hoste isso me permitiu executá-lo.
Eu recebo o pontapé do uso do cURL para esse fim exato. A página de manual lista o protocolo "FILE" como suportado; portanto, use-o como qualquer outro protocolo em um URL:
curl -o destination FILE://source
Velocidade, progresso, tempo restante e muito mais - tudo em um formato familiar.
pv, que não irá poupar permissões.
Embora não exiba velocidade, ao copiar vários arquivos, a -vopção do cpcomando fornecerá informações sobre o andamento. por exemplo
cp -rv old-directory new-directory
O kernel conhece a maioria dos dados, como velocidade, e geralmente também porcentagem. Os kernels modernos expõem isso por meio do sistema de arquivos / proc.
showspeed de https://github.com/jnweiger/showspeed usa essas informações. Ele pode ser anexado a programas já em execução e fornecer atualizações periódicas como esta:
$ dd if=bigfile of=/tmp/otherbigfile &
$ showspeed dd
dd looks like a process name. pid=4417 matches av0=dd.
p/4417/fd/0r /home/jw/bigfile 113MB/s (12%, 2.3GB) 9m:35
p/4417/fd/1w /tmp/otherbigfile 182MB/s (2.6GB)
p/4417/fd/0r /home/jw/bigfile 285MB/s (15%, 3.0GB) 8m:08
p/4417/fd/0r /home/jw/bigfile 115MB/s (16%, 3.2GB) 8m:01
p/4417/fd/0r /home/jw/bigfile 107MB/s (17%, 3.4GB) 7m:39
p/4417/fd/1w /tmp/otherbigfile 104MB/s (3.5GB)
p/4417/fd/0r /home/jw/bigfile 139MB/s (19%, 3.7GB) 7m:37
p/4417/fd/0r /home/jw/bigfile 116MB/s (20%, 3.9GB) 7m:18
p/4417/fd/1w /tmp/otherbigfile 67MB/s (4.0GB)
p/4417/fd/1w /tmp/otherbigfile 100MB/s (4.1GB)
...
pkill -USR1 ddpara ddmostrar o status, outra opção seria watch -n 1 pkill -USR1 ddmostrar o progresso periodicamente (a cada segundo).
Existe uma ferramenta chamada progressnos repositórios que é capaz de examinar vários comandos diferentes e exibir informações de progresso para eles.
Instale-o usando o comando
sudo apt-get install progress
Essa ferramenta pode ser usada assim:
cp bigfile newfile & progress -mp $!
Resultado:
[11471] cp /media/Backup/Downloads/FILENAME.file
29.9% (24.2 MiB / 16 MiB)
Embora pvpossa lidar com cptarefas locais , o uso ddcom pvpode lidar com tarefas locais ( cp) e remotas ( scp).
dd if=path/to/source.mkv | pv | dd of=path/to/dest.mkv
Garanta as path/to/dest.mkvsaídas portouch path/to/dest.mkv
Isso pode mostrar o progresso, mas se você quiser as informações de porcentagem,
dd if=path/to/source.mkv | pv -s 100M | dd of=path/to/dest.mkv
Substituir 100M acima pelo tamanho real do seu arquivo de origem.
Embora scpdificilmente possa mostrar o progresso atual, usar ddcom pvé um pedaço de bolo.
ssh onemach@myotherhost dd if=path/to/source.mkv | pv -s 100M | dd of=path/to/dest.mkv
Existe uma nova ferramenta chamada cv que pode encontrar qualquer descritor relacionado a um comando em execução e mostrar progresso e velocidade: https://github.com/Xfennec/cv
cv -w
gera estatísticas para todas as operações cp, mv etc. em execução
watch cv -qé ainda mais puro
cpestá copiando um diretório recursivamente ou não.
Como muitos disseram, o cp não inclui essa funcionalidade.
Apenas para jogar meus US $ 0,02, o que eu costumo fazer com situações triviais de cópia (ou seja, não -R):
Veja o tamanho do arquivo e lembre-se
Comece a copiar
Abra outro terminal
Execute watch ls -lh DIRno diretório em que o destino está
Isso pode me manter atualizado sobre o tamanho do arquivo de destino, com um mínimo de problemas.
Como alternativa para situações menos triviais, como copiar diretórios recursivamente, você pode usar watch du -hs DIRpara ver um resumo do tamanho do DIR. No entanto, du pode levar muito tempo para calcular e pode até atrasar a cópia, portanto, você pode querer usar-n INTERVAL argumento para assistir para que o trade-off seja aceitável.
Atualização: Caso você use curingas com o comando usado no watch du, por exemplo watch du -hs backup/*, não esqueça de citar:
watch "du -hs backup/*"
caso contrário, os curingas serão expandidos apenas uma vez , quando o relógio for iniciado, para que o du não veja novos arquivos / subdiretórios.
dd status=progress
Opção adicionada no GNU Coreutils 8.24+ (Ubuntu 16.04):
dd if=src of=dst status=progress
O terminal mostra uma linha do tipo:
462858752 bytes (463 MB, 441 MiB) copied, 38 s, 12,2 MB/s
Veja também: Como você monitora o progresso do dd?
Se você possui o rsync 3.1 ou superior ( rsync --version), pode copiar (cp -Rpn) enquanto preserva permissões e propriedade, recursa diretórios "no clobber" e exibe o progresso geral (em vez de apenas o progresso por arquivo), a taxa de cópia e ( muito aproximado) tempo estimado restante com:
sudo rsync -a --info=progress2 --no-i-r /source /destination
Note que o sudo é necessário apenas se você lida com diretórios / arquivos que você não possui. Além disso, sem o --no-i-r, a porcentagem pode redefinir para um número menor em algum momento durante a cópia. Talvez as versões posteriores do rsync sejam padronizadas como no-ir com info = progress2, mas não na versão atual do 3.1.2.
Eu descobri que a porcentagem e o tempo restante são superestimados ao copiar para um diretório que já contém arquivos (ou seja, como quando você usaria cp -n "no clobber").
Use um script de shell:
#!/bin/sh
cp_p()
{
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
}
Será parecido com:
% cp_p /home/echox/foo.dat /home/echox/bar.dat
66% [===============================> ]
Dependendo do que você deseja fazer, Midnight Commander ( mc) pode ser a resposta. Estou surpreso que ainda não tenha sido mencionado.
Ferramentas como pvou rsyncsão boas para exibir o progresso da transferência de um arquivo enorme, mas quando se trata de copiar diretórios / árvores inteiros, mccalcula o tamanho e exibe o progresso muito bem. Além disso, está disponível imediatamente na maioria dos sistemas.
mais uma opção para preservar atributos (se sourcefor uma pasta na qual ela será criada destination)
tar -c source | pv -e -t -p -r | tar -C destination -x
espero que possa ser útil para alguém. Para estimar o tempo de transferência, é possível obter isso do -s sourceantecipadamente e passando como -s <size>parâmetro para pv.
-f -é redundante. tarA saída ce entrada xpadrão de são stdout e stdin.
Verifique o código fonte para progress_bar no repositório git abaixo
https://github.com/Kiran-Bose/supreme
Experimente também o pacote de scripts bash customizado supremo
Baixe o arquivo deb e instale na distribuição baseada em debian ou baixe os arquivos de origem, modifique e use para outras distribuições
Visão geral da funcionalidade
(1) Aplicativos abertos ---- Firefox ---- Calculadora ---- Configurações
(2) Gerenciar arquivos ---- Pesquisar ---- Navegar ---- Acesso rápido
|----Select File(s)
|----Inverse Selection
|----Make directory
|----Make file
|----Open
|----Copy
|----Move
|----Delete
|----Rename
|----Send to Device
|----Properties
(3) Gerenciar telefone ---- Mover / copiar do telefone ---- Mover / copiar para o telefone ---- Sincronizar pastas
(4) Gerenciar USB ---- Mover / Copiar de USB ---- Mover / Copiar para USB
pv sabe como assistir descritores de arquivo dados um pid, seja cp ou outra coisa
A partir da documentação:
(Linux only): Watching file descriptor 3 opened by another process 1234:
pv -d 1234:3
(Linux only): Watching all file descriptors used by process 1234:
pv -d 1234
Exemplo:
md5sum file &
[1] + 1271 suspended
pv -d 1271
417MiB 0:00:17 [12,1MiB/s] [============> ] 29% ETA 0:00:53
$ cp file.mov copy.mov &
[2] 3731
$ pv -d 3731
3:/media/windows/file.mov: 754MiB 0:00:04 [97,2MiB/s] [======================> ] 52% ETA 0:00:07
4:/media/windows/copy.mov: 754MiB 0:00:04 [97,3MiB/s] [ <=> ]
pvnão manipula permissões da mesma forma quecpfaz ... (com base em um teste rápido eu tentei:pvnão copiar o bit de execução em toda ..rsync. Fez