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 cp
não tenha essa funcionalidade, você pode pv
fazer 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, pv
basicamente 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. cp
basicamente não faz nada mais sofisticado do que
cat source > destination
(onde cat
apenas 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 pv
para 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/fd
e /proc/PID of cp/fdinfo
descobrir o progresso. (Depende de você inferir velocidade.) Eu uso essa técnica para assistir updatedb
.
-z
provavelmente só deve ser usado para cópias em rede; compactar e descompactar os dados para uma cópia local é pura sobrecarga.
rsync
certifique-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, rsync
possui um --progress
parâmetro O -a
manterá permissões, etc, e -h
será 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)
-r
sinalizador para recursar diretórios. Pode até ser um alias como um substituto direto para cp:alias cp="rsync -ah --progress"
--progress
faz 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 gcp
e 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 , gcp
possui 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, --preserve
para que vários atributos e permissões possam ser preservados e --recursive
para que diretórios inteiros possam ser copiados. Mais informações sobre suas opções podem ser encontradas entrando man gcp
ou acessando as páginas de manual do Ubuntu online . Um tutorial também está disponível neste site .
Instale a gcp
partir 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 gcp
com 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.0
antes 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@host
e 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 -v
opção do cp
comando 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 dd
para dd
mostrar o status, outra opção seria watch -n 1 pkill -USR1 dd
mostrar o progresso periodicamente (a cada segundo).
Existe uma ferramenta chamada progress
nos 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 pv
possa lidar com cp
tarefas locais , o uso dd
com pv
pode 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.mkv
saí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 scp
dificilmente possa mostrar o progresso atual, usar dd
com 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
cp
está 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 DIR
no 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 DIR
para 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 pv
ou rsync
são boas para exibir o progresso da transferência de um arquivo enorme, mas quando se trata de copiar diretórios / árvores inteiros, mc
calcula 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 source
for 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 source
antecipadamente e passando como -s <size>
parâmetro para pv
.
-f -
é redundante. tar
A saída c
e entrada x
padrã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] [ <=> ]
pv
não manipula permissões da mesma forma quecp
faz ... (com base em um teste rápido eu tentei:pv
não copiar o bit de execução em toda ..rsync
. Fez