如何使用 rsync 移动多个文件并显示进度?

如何使用 rsync 移动多个文件并显示进度?

我可以使用此命令移动文件:

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

问题是,它根本没有显示任何进度,所以我不知道操作完成了 1% 还是 80%。

我知道 rsync 能够显示进度。

那么上述命令的 rsync 变体会是什么样子,同时还显示操作的进度?

谢谢

答案1

您可以使用 Coreutils 进度查看器progress 安装进度. 安装后1,只需将您的mv进程发送到后台并提供progress其 PID:

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

用于progress -w显示所有正在运行的 coreutils 进程及其进度的列表。请参阅man progress及其github 页面获取更多选项和示例。

进一步阅读很多不同的方法:
如何移动文件并查看进度(例如使用进度条)?

1:如果您使用的是 Ubuntu 14.04,那么很遗憾您必须自己构建软件,请参阅上面链接的 github 页面。

答案2

背景

  • mv在同一文件系统 [分区] 内移动文件/目录时,仅重命名指向 inode 的链接
  • mv正在复制文件/目录,然后在文件系统[分区]之间删除原始文件/目录。

在您的示例中,您移动到另一个文件系统,因此rsync将执行相同的工作(复制)。您可以添加一个命令,以便随后删除原始目录树(当您确定复制确实有效时)。这可以在 shellscript 中完成(允许进行一些手动检查,至少在您觉得操作安全之前)。

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

再次运行相同的rsync命令行,如果它没有传输任何内容,则文件已被复制,您可以删除原始文件或目录树。

例子

复制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)

检查(如果您愿意)

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

使用以下方法删除文件和目录

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

答案3

它看起来像:

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

例子:

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

相关内容