否则,是否有其他命令行实用程序可以实现这一点?
答案1
没有。请参阅这里至于为什么。虽然它的功能比你需要的要多,但它rsync
有一个--progress
参数。它将-a
保留权限等,并且-h
将是人类可读的。
rsync -ah --progress source destination
输出将会像这样:
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)
答案2
虽然cp
没有此功能,但是您可以使用pv
它来执行此操作:
pv my_big_file > backup/my_big_file
注意:此方法将丢失文件的权限和所有权。通过此方法复制的文件将具有与您自己创建的文件相同的权限,并且将属于您。
在此示例中,pv
基本上只是将文件输出到 stdout*,您可以使用运算符将其重定向到文件>
。同时,当您执行此操作时,它会将有关进度的信息打印到终端。
它看起来是这样的:
stefano@ubuntu:~/Data$ pv my_big_file > backup/my_big_file
138MB 0:00:01 [73.3MB/s] [=================================>] 100%
您可能需要安装 pv(或者,sudo apt-get install pv
在您的系统上输入)。
*:技术层面
在类 Unix 系统中,有三种重要的数据流:stdout(标准输出)、stderr(标准错误)和 stdin(标准输入)。可以说,每个程序都有这三种数据流。重定向运算>
符将程序输出重定向到文件。如上所示,不带参数时,>
重定向程序的标准输出到一个文件。cp
基本上没有什么比
cat source > destination
(其中cat
仅读取文件并将其打印到标准输出)。pv
就像 cat,但是如果您将其输出流重定向到其他位置,它会将进度信息打印到标准输出。
查看man pv
并了解更多相关信息。
另一种选择是,正如 DoR 建议的那样这个答案,而是使用 rsync:
$ rsync -ah --progress source-file destination-file
sending incremental file list
source-file
621.22M 57% 283.86MB/s 0:00:01
这将在显示进度的同时保留文件的权限/所有权。
答案3
我很喜欢使用 cURL 来实现这个目的。手册页列出了受支持的“FILE”协议,因此只需像在 URL 中任何其他协议一样使用它即可:
curl -o destination FILE://source
速度、进度、剩余时间等等——全部采用熟悉的格式。
答案4
存储库中有一个名为的工具progress
,可以检查各种不同的命令并显示它们的进度信息。
使用命令安装
sudo apt-get install progress
此工具可以这样使用:
cp bigfile newfile & progress -mp $!
输出:
[11471] cp /media/Backup/Downloads/FILENAME.file
29.9% (24.2 MiB / 16 MiB)