53

我想随着 cp 的进行,我可以将源目录中的文件数与目标目录中的文件数进行比较,或者用文件夹大小来代替?我试图找到示例,但所有 bash 进度条似乎都是为复制单个文件而编写的。我想复制一堆文件(或一个目录,如果前者不可能的话)。

4

11 回答 11

73

您也可以使用rsync而不是cp这样:

rsync -Pa source destination

这将为您提供进度条和预计完成时间。非常便利。

于 2013-08-12T00:11:22.253 回答
24

要在执行文件、文件夹和子文件夹(包括链接和文件属性)的递归副本时显示进度条,您可以使用gcp(通过运行“sudo apt-get install gcp”轻松安装在 Ubuntu 和 Debian 中):

gcp -rf SRC DEST

以下是复制大型文件夹时的典型输出:

Copying 1.33 GiB  73% |#####################      | 230.19 M/s ETA:  00:00:07

请注意,它只显示整个操作的一个进度条,而如果您希望每个文件有一个进度条,您可以使用rsync

rsync -ah --progress SRC DEST
于 2013-11-26T15:38:11.807 回答
6

你可以看看这个工具vcp。这是一个带有两个进度条的简单复制工具:一个用于当前文件,一个用于整体。

编辑

以下是源链接:http : //members.iinet.net.au/~lynx/vcp/ 可以在此处找到手册页:http: //linux.die.net/man/1/vcp

大多数发行版都有一个包。

于 2011-08-20T00:03:21.570 回答
4

这里有另一个解决方案:使用该工具bar

你可以像这样调用它:

#!/bin/bash
filesize=$(du -sb ${1} | awk '{ print $1 }')
tar -cf - -C ${1} ./ | bar --size ${filesize} | tar -xf - -C ${2}

你必须通过 tar,它在小文件上会不准确。此外,您必须注意目标目录是否存在。但这是一种方式。

于 2011-08-20T00:47:55.217 回答
3

我的首选选项是Advanced Copy,因为它使用原始cp源文件。

$ wget http://ftp.gnu.org/gnu/coreutils/coreutils-8.21.tar.xz
$ tar xvJf coreutils-8.21.tar.xz
$ cd coreutils-8.21/
$ wget --no-check-certificate wget https://raw.githubusercontent.com/jarun/advcpmv/master/advcpmv-0.8-8.32.patch
$ patch -p1 -i advcpmv-0.8-8.32.patch
$ ./configure
$ make

新程序现在位于 src/cp 和 src/mv。您可以选择替换现有命令:

$ sudo cp src/cp /usr/local/bin/cp
$ sudo cp src/mv /usr/local/bin/mv

然后就可以cp照常使用了,或者指定-g显示进度条:

$ cp -g src dest
于 2014-06-26T11:29:47.397 回答
2

一个简单的 unix方法是转到目标目录并执行watch -n 5 du -s. 也许通过显示为条形使其更漂亮。这在您只有标准的 unix utils 而没有安装附加文件的环境中会有所帮助。du-sh 是关键,watch 是每 5 秒做一次。 优点:适用于任何 unix 系统 缺点:没有进度条

于 2014-01-12T21:42:49.690 回答
2

要添加另一个选项,您可以使用cpv. 它pv用来模仿cp.

它的工作原理类似pv,但您可以使用它递归复制目录

在此处输入图像描述

你可以在这里得到

于 2017-09-14T07:43:53.523 回答
0

有一个工具pv可以做到这一点:http ://www.ivarch.com/programs/pv.shtml

apt中有一个ubuntu版本

于 2011-08-21T01:39:39.650 回答
0

在我的以下 git 存储库中检查progress_bar的源代码

https://github.com/Kiran-Bose/supreme

还可以尝试自定义 bash 脚本包验证进度条如何与cpmv命令一起使用

功能概述

(1)打开应用----火狐----计算器----设置

(2)管理文件----搜索----导航----快速访问

            |----Select File(s)
            |----Inverse Selection
            |----Make directory
            |----Make file
                                          |----Open
                                          |----Copy
                                          |----Move
                                          |----Delete
                                          |----Rename
                                          |----Send to Device
                                          |----Properties

(3)管理手机----从手机移动/复制----移动/复制到手机----同步文件夹

(4)管理 USB ----从 USB 移动/复制 ----移动/复制到 USB

于 2018-09-11T04:03:42.777 回答
0

像这样的东西怎么样

find . -type f | pv -s $(find . -type f | wc -c) | xargs -i cp {} --parents /DEST/$(dirname {})

它找到当前目录中的所有文件,通过 PV 管道传输,同时为 PV 提供估计大小,以便进度计工作,然后将其管道传输到带有 --parents 标志的 CP 命令,以便 DEST 路径与 SRC 路径匹配。

我还没有解决的一个问题是,如果你发出这个命令

find /home/user/test -type f | pv -s $(find . -type f | wc -c) | xargs -i cp {} --parents /www/test/$(dirname {})

目标路径变为 /www/test/home/user/test/....FILES... 我不确定如何告诉命令摆脱 '/home/user/test' 部分。这就是为什么我必须从 SRC 目录中运行它的原因。

于 2017-02-28T03:03:08.473 回答
0

有命令progresshttps://github.com/Xfennec/progress、coreutils进度查看器。

只需在另一个终端中运行进度即可查看复制/移动进度。对于持续监控,请使用 -M 标志。

于 2021-11-17T03:03:10.623 回答