Mic*_*zek 53

标准的 coreutilscp命令不支持这一点。有一个 Gentoo 补丁可以为不同的版本添加它,尽管由于某种原因它不再包含在 Gentoo 中;coreutils 6.10 的版本在他们的 bugzilla 中,我相信周围还有很多其他版本。

如果您不想修补cp,则需要使用其他一些命令。例如,rsync有一个--progress标志,所以你可以这样做:

rsync --progress source destination
Run Code Online (Sandbox Code Playgroud)

如果不是复制您 cat 数据然后将 stdout 重定向到目标(即cat source > destination),那么您可以使用测量管道吞吐量的程序并将其插入中间(cat source | SOME-PROGRAM > destination);在这个相关问题中提到了一对夫妇。我推荐的那个是pv (Pipe Viewer):

来自光伏主页的光伏截图

如果你给它这个--rate标志,它会显示传输速率

  • @Chris 好吧,你总是可以为它添加一个函数。`function cprate() {cat "$1" | pv --rate > "$2"}` (8认同)

小智 19

我发现以这种方式使用 pv 可以很好地达到这个目的

pv -p file1 > file2
Run Code Online (Sandbox Code Playgroud)

-p开关显示文件传输进度。要查看传输速度,请添加-r开关。如果您想查看一段时间内的平均传输速率,可以使用-a开关。

pv -pra file1 > file2
Run Code Online (Sandbox Code Playgroud)

  • `pv` 是 [Pipe Viewer](http://www.ivarch.com/programs/pv.shtml),非常棒。@Patrick,请用解释扩展您的帖子。 (3认同)
  • 这与我在回答中提到的命令相同,尽管我没有意识到它需要一个文件名参数(我做了`cat file | pv`) (2认同)

小智 10

我知道这很旧,但是...

如果您实际上不想显示费率,而只想查看在复制大文件时是否发生了某些事情,您也可以仅使用以下watch命令(也可与 一起使用mv):

cp /path/to/myfile /path/to/target/myfile
Run Code Online (Sandbox Code Playgroud)

然后,在另一个 shell 中,或将复制命令推送到后台(例如使用Ctrl + Z后跟bg),您可以使用以下命令检查结果:

watch "ls -sh1 /path/to/target"
Run Code Online (Sandbox Code Playgroud)

这将不断更新ls命令更新的输出(默认情况下每 2.0 秒),显示如下内容:

Every 2.0s: ls -sh1 /path/to/target                                      
Tue Jan 12 15:02:45 2016

total 1.1G
4.0K data
130M tmp1.txt
137M tmp2.txt
151M tmp3.txt
168M tmp4.txt
162M myFile
Run Code Online (Sandbox Code Playgroud)


小智 5

嗨,显示传输速度的另一种方法是scp在 localhost上使用,如下所示:
scp -rv src_folder user@localhost:/dest_folder