web-dev-qa-db-fra.com

Comment déplacer plusieurs fichiers avec rsync tout en montrant la progression?

Je peux déplacer des fichiers avec cette commande:

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

Le problème est que cela ne montre aucun progrès, alors je ne sais pas si l'opération est effectuée à 1% ou à 80%.

Je sais que rsync est capable de montrer des progrès.

Alors, à quoi ressemblerait une variante rsync de la commande ci-dessus, tout en montrant la progression de l'opération?

Je vous remercie

4
Askerman

Vous pouvez utiliser Coreutils Progress Viewer progress Install progress . Après l'avoir installé1, envoyez simplement votre processus mv à l’arrière-plan et fournissez à progress son PID:

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

Utilisez progress -w pour afficher une liste de tous les processus coreutils en cours d'exécution avec leur progression. Voir man progress et ses page github pour plus d'options et d'exemples.

Lectures complémentaires avec beaucoup d'approches différentes:
Comment puis-je déplacer des fichiers et afficher la progression (avec une barre de progression, par exemple)?

1: Si vous utilisez Ubuntu 14.04, vous devrez malheureusement créer le logiciel vous-même, voir la page github liée ci-dessus.

4
dessert

Contexte

  • mv ne renomme que le lien en inode lors du déplacement d'un fichier/répertoire dans le même système de fichiers [partition]
  • mv copie le fichier/répertoire, puis supprime celui d'origine entre les systèmes de fichiers [partitions].

Dans votre exemple, vous passez à un autre système de fichiers. rsync fera le même travail (copie). Vous pouvez ajouter une commande pour supprimer ultérieurement l’arborescence de répertoires d’origine (lorsque vous êtes certain que la copie a réellement fonctionné). Cela peut être fait en shellscript (qui permet une inspection manuelle, au moins jusqu'à ce que vous vous sentiez en sécurité avec l'opération).

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.)

Exécutez la même ligne de commande rsync et, si elle ne transfère rien, les fichiers sont copiés et vous pouvez supprimer les fichiers d'origine ou l'arborescence de répertoires.

Exemple

Copier avec 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)

Chèque (si vous le souhaitez)

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

Supprimer des fichiers et des répertoires avec

rm -r *.iso  # remove the same as the source in the rsync command line
4
sudodus

Cela ressemblerait à:

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

Exemple:

~ 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)
1
muru