我可以使用此命令移动文件:
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)