否则,是否有任何其他命令行实用程序可以实现此目的?
否则,是否有任何其他命令行实用程序可以实现此目的?
Answers:
虽然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
仅读取文件并将其打印到stdout)。pv
就像cat,但是如果将它的输出流重定向到其他地方,它将打印进度信息到stdout。
看一下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
显示进度时,这将保留文件的权限/所有权。
alias cp="rsync -avz"
cp已过时。
pv
,可以偷窥/proc/PID of cp/fd
并/proc/PID of cp/fdinfo
确定进度。(由您来推断速度。)我使用这种技术进行观看updatedb
。
-z
应该只用于网络副本;压缩和解压缩本地副本的数据纯属开销。
rsync
确保不要在/
源路径中添加尾随(或删除,如果bash 补全会自动将其放在此处)。否则,您将获得与使用cp
(或gcp
)时不同的结果。
没有。看看这里为什么。尽管它做的比您需要的要多,但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)
-r
递归目录的标志。它甚至可以别名为cp的直接替代品:alias cp="rsync -ah --progress"
--progress
使我的头部旋转🙃观看终端中的所有输出显示。因此,那些来自AOL关键字搜索的 rsync -ah --info=progress2 [source] [destination]
内容以恕我直言的方式呈现输出。
如果要查看文件传输是否正确,可以使用cp gcp
,gcp
就像cp一样,但是默认情况下会显示一个进度条,以便您查看正在复制的内容。如该程序的Wiki所述,gcp
具有一些有用的功能,例如
- 转移进度指示
- 错误时连续复制(跳至下一个文件)
- 复制状态记录:gcp记录其所有操作,以便可以知道已成功复制了哪些文件
- 名称处理以处理目标文件系统限制(例如,删除FAT上不兼容的字符“ *”或“?”)
但是,即使在使用该工具时进度条达到100%的情况下,也必须等到终端提示再次出现后,才能安全删除介质,以确保传输过程已成功完成。
gcp
用于复制文件,并具有诸如的选项,--preserve
以便可以保留各种属性和权限,并--recursive
可以复制整个目录。有关其选项的更多信息,可通过进入man gcp
或在线访问Ubuntu手册页找到。该站点上也提供了教程。
gcp
从存储库安装
sudo apt-get install gcp
(注意:例如,在Ubuntu 12.10中,新的自动挂载点是/media/user/usbdisk
)
您可以通过输入以下命令将文件复制到媒体中
gcp /home/mike/file.mp4 /media/usb
并将文件夹复制到您的媒体
gcp -rv ~/Podcasts /media/Mik2
gcp
带有进度条的示例输出:
gcp ~/Videos_incIplayer/mars.flv /media/Mik2
Copying 168.57 MiB 100% |########################################################| 7.98 M/s Time: 00:00:22
当然,您可以指定多个文件或文件夹以复制到磁盘上,并且还介绍了许多其他选项man gcp
。
dbus.exceptions.DBusException: org.freedesktop.DBus.Error.NotSupported: Unable to autolaunch a dbus-daemon without a $DISPLAY for X11
export DISPLAY=:0.0
在启动gcp之前进行设置。如果机器没有头,那么您必须将xsession启动到虚拟帧缓冲区之类的东西,
gcp
相当不错,但DBUS / X要求却很奇怪。我使用ssh转发通过SSH处理了此问题:ssh -X user@host
这使我可以运行它。
尽管它不显示速度,但是在复制多个文件时,-v
该cp
命令的选项将为您提供进度信息。例如
cp -rv old-directory new-directory
内核知道大多数数据,例如速度,通常还包括百分比。现代内核通过其/ proc文件系统公开此信息。
来自https://github.com/jnweiger/showspeed的 showspeed 使用该信息。它可以附加到已经在运行的程序上,并提供如下定期更新:
$ dd if=bigfile of=/tmp/otherbigfile &
$ showspeed dd
dd looks like a process name. pid=4417 matches av0=dd.
p/4417/fd/0r /home/jw/bigfile 113MB/s (12%, 2.3GB) 9m:35
p/4417/fd/1w /tmp/otherbigfile 182MB/s (2.6GB)
p/4417/fd/0r /home/jw/bigfile 285MB/s (15%, 3.0GB) 8m:08
p/4417/fd/0r /home/jw/bigfile 115MB/s (16%, 3.2GB) 8m:01
p/4417/fd/0r /home/jw/bigfile 107MB/s (17%, 3.4GB) 7m:39
p/4417/fd/1w /tmp/otherbigfile 104MB/s (3.5GB)
p/4417/fd/0r /home/jw/bigfile 139MB/s (19%, 3.7GB) 7m:37
p/4417/fd/0r /home/jw/bigfile 116MB/s (20%, 3.9GB) 7m:18
p/4417/fd/1w /tmp/otherbigfile 67MB/s (4.0GB)
p/4417/fd/1w /tmp/otherbigfile 100MB/s (4.1GB)
...
pkill -USR1 dd
以dd
显示其状态,另一种选择是watch -n 1 pkill -USR1 dd
使其定期(每秒)显示其进度。
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)
虽然pv
可以处理本地cp
的任务,使用dd
具有pv
能处理本地(cp
)和远程(scp
)的任务。
dd if=path/to/source.mkv | pv | dd of=path/to/dest.mkv
请确保path/to/dest.mkv
通过touch path/to/dest.mkv
这可以显示进度,但是如果您需要百分比信息,
dd if=path/to/source.mkv | pv -s 100M | dd of=path/to/dest.mkv
将100M
上面的替换为源文件的实际大小。
虽然scp
几乎无法显示当前的进度,但使用dd
with pv
却是小菜一碟。
ssh onemach@myotherhost dd if=path/to/source.mkv | pv -s 100M | dd of=path/to/dest.mkv
有一个名为cv的新工具,可以找到与正在运行的命令相关的任何描述符,并显示进度和速度:https : //github.com/Xfennec/cv
cv -w
输出所有正在运行的cp,mv等操作的统计信息
watch cv -q
更整洁
cp
递归方式复制目录。
如许多人所述,cp不包含此功能。
只是丢下我的0.02美元,这是我通常在琐碎的复印情况下所做的工作(即,否-R
):
查看文件的大小并记住
开始复制
打开另一个终端
watch ls -lh DIR
在目标所在的目录上运行
这可以让我随时了解目标文件大小的最新信息,而麻烦最少。
作为不那么琐碎的情况(例如,递归复制目录)的替代方法,您可以watch du -hs DIR
用来查看DIR大小的摘要。但是du的计算可能会花费很长时间,甚至会减慢复制速度,因此您可能希望使用-n INTERVAL
参数进行观察,以便可以进行折衷。
更新:如果您在watch du中使用通配符和命令,例如watch du -hs backup/*
,请不要忘记引用:
watch "du -hs backup/*"
否则,当监视开始时,通配符将仅扩展一次,因此du将不会查看新文件/子目录。
dd status=progress
在GNU Coreutils 8.24+(Ubuntu 16.04)中添加的选项:
dd if=src of=dst status=progress
终端显示以下类型的行:
462858752 bytes (463 MB, 441 MiB) copied, 38 s, 12,2 MB/s
另请参阅:您如何监视dd的进度?
如果您具有rsync 3.1或更高版本(rsync --version
),则可以在保留权限和所有权的同时复制(cp -Rpn),递归目录,“不破坏”,并显示总体进度(而不是仅按文件显示进度),复制率和(非常粗略)估计剩余时间:
sudo rsync -a --info=progress2 --no-i-r /source /destination
请注意,只有在处理您不拥有的目录/文件时才需要sudo。另外,如果没有--no-i-r
,则在复制过程中的某些时候百分比可能会重置为较低的数字。也许更高版本的rsync将默认为no-ir且info = progress2,但在当前版本3.1.2中则不这样。
我发现复制到已经包含文件的目录时(例如,当您通常使用cp -n“ no clobber”时),剩余的百分比和时间被高估了。
使用shell脚本:
#!/bin/sh
cp_p()
{
strace -q -ewrite cp -- "${1}" "${2}" 2>&1 \
| awk '{
count += $NF
if (count % 10 == 0) {
percent = count / total_size * 100
printf "%3d%% [", percent
for (i=0;i<=percent;i++)
printf "="
printf ">"
for (i=percent;i<100;i++)
printf " "
printf "]\r"
}
}
END { print "" }' total_size=$(stat -c '%s' "${1}") count=0
}
看起来像:
% cp_p /home/echox/foo.dat /home/echox/bar.dat
66% [===============================> ]
保留属性的另一个选择是(如果source
将在中创建文件夹destination
)
tar -c source | pv -e -t -p -r | tar -C destination -x
希望对某人有用。要估算传输时间,可以do -s source
提前进行并将其作为-s <size>
参数传递给pv
。
-f -
是多余的。tar
的默认输出c
和输入为x
stdout和stdin。
在下面的git仓库中检查progress_bar的源代码
https://github.com/Kiran-Bose/supreme
也可以尝试定制bash脚本包至上
下载deb文件并安装在基于debian的发行版中,或下载源文件,进行修改并用于其他发行版
功能概述
(1)打开应用程序---- Firefox ----计算器----设置
(2)管理文件----搜索----导航----快速访问
|----Select File(s)
|----Inverse Selection
|----Make directory
|----Make file
|----Open
|----Copy
|----Move
|----Delete
|----Rename
|----Send to Device
|----Properties
(3)管理电话-从电话中移动/复制-移动/复制到电话-同步文件夹
(4)管理USB ----从USB移动/复制----移动/复制到USB
pv知道如何监视给定pid的文件描述符,无论它是cp还是其他
从文档中:
(Linux only): Watching file descriptor 3 opened by another process 1234:
pv -d 1234:3
(Linux only): Watching all file descriptors used by process 1234:
pv -d 1234
例:
md5sum file &
[1] + 1271 suspended
pv -d 1271
417MiB 0:00:17 [12,1MiB/s] [============> ] 29% ETA 0:00:53
$ cp file.mov copy.mov &
[2] 3731
$ pv -d 3731
3:/media/windows/file.mov: 754MiB 0:00:04 [97,2MiB/s] [======================> ] 52% ETA 0:00:07
4:/media/windows/copy.mov: 754MiB 0:00:04 [97,3MiB/s] [ <=> ]
pv
权限以同样的方式不处理的cp
呢...(基于一个简单的测试我想:pv
没碰到过..复制执行位rsync
。没有