Como mover vários arquivos com o rsync enquanto mostra o progresso?

4

Eu posso mover arquivos com este comando:

mv -t /mnt/hdd /home/me/movies/movie1.avi /home/me/movies/movie2.avi

O problema é que ele não mostra nenhum progresso, então eu não sei se a operação está 1% pronta ou 80% pronta.

Eu sei que o rsync é capaz de mostrar progresso.

Então, como seria uma variação de rsync do comando acima, mostrando também o progresso da operação?

Obrigado

    
por Askerman 25.05.2018 / 11:54

3 respostas

4

Você pode usar o Coreutils Progress Viewer progress Depoisdeinstalaro1,simplesmenteenvieseuprocessomvparaosegundoplanoeforneçaprogresscomseuPID:

mv-t/path/to/file1/path/to/file2&progress-mp$!

Useprogress-wparamostrarumalistadetodososprocessoscoreutilsemexecuçãocomseuprogresso.Vejamanprogressesua página do github para mais opções e exemplos.

Mais leituras com muitas abordagens diferentes: Como posso mover arquivos e ver o progresso (por exemplo, com uma barra de progresso)?

1: Se você estiver usando o Ubuntu 14.04, infelizmente terá que criar o software você mesmo, veja a página do github acima.

    
por dessert 25.05.2018 / 14:44
4

Antecedentes

  • mv está apenas renomeando o link para o inode, ao mover um arquivo / diretório dentro do mesmo sistema de arquivos [partição]
  • mv está copiando o arquivo / diretório e depois disso removendo o original entre os sistemas de arquivos [partições].

No seu exemplo, você move para outro sistema de arquivos, então rsync fará o mesmo trabalho (copiando). Você pode adicionar um comando para remover a árvore de diretórios original (quando tiver certeza de que a cópia realmente funcionou). Isso pode ser feito em um shellscript (que permite alguma inspeção manual, pelo menos até você sentir-se seguro com a operação).

De man rsync

   -P     The -P option is equivalent to --partial --progress.   Its  pur‐
          pose  is to make it much easier to specify these two options for
          a long transfer that may be interrupted.

          There is also a --info=progress2 option that outputs  statistics
          based  on the whole transfer, rather than individual files.  Use
          this flag without outputting a filename (e.g. avoid -v or  spec‐
          ify  --info=name0)  if you want to see how the transfer is doing
          without scrolling the screen with a lot of  names.   (You  don’t
          need   to   specify  the  --progress  option  in  order  to  use
          --info=progress2.)

Execute a mesma linha de comando rsync novamente, e se ela não transferir nada, os arquivos serão copiados e você poderá remover os arquivos originais ou a árvore de diretórios.

Exemplo

Copie com rsync

$ ls -l
totalt 2064196
-rw------- 1 sudodus sudodus 1921843200 apr 26 18:44 orig.iso
-rw-rw-r-- 1 sudodus sudodus  191889408 maj 23  2016 test.iso
$ rsync --info=progress2 -Ha *.iso /tmp
  2,113,732,608 100%  171.10MB/s    0:00:11 (xfr#2, to-chk=0/2)

Verifique (se desejar)

$ rsync --info=progress2 -Ha *.iso /tmp
          0   0%    0.00kB/s    0:00:00 (xfr#0, to-chk=0/2)

Remova arquivos e diretórios com

rm -r *.iso  # remove the same as the source in the rsync command line
    
por sudodus 25.05.2018 / 16:59
1

Seria parecido com:

rsync -aP /home/me/movies/movie1.avi /home/me/movies/movie2.avi /mnt/hdd

Exemplo:

~ rsync -aP /usr/bin/{free,man} /tmp
sending incremental file list
free
         18,808 100%    0.00kB/s    0:00:00 (xfr#1, to-chk=1/2)
man
        107,008 100%  102.05MB/s    0:00:00 (xfr#2, to-chk=0/2)
    
por muru 25.05.2018 / 12:06