Bash 在使用cp复制目录时,如何制作进度条?
我想随着cp的进展,我可以比较源目录中的文件数和目标目录中的文件数,或者用文件夹大小来代替?我试图找到示例,但所有bash进度条似乎都是为复制单个文件而编写的。我想复制一组文件(或者一个目录,如果前者不可能的话)。您可以看看工具Bash 在使用cp复制目录时,如何制作进度条?,bash,progress-bar,cp,Bash,Progress Bar,Cp,我想随着cp的进展,我可以比较源目录中的文件数和目标目录中的文件数,或者用文件夹大小来代替?我试图找到示例,但所有bash进度条似乎都是为复制单个文件而编写的。我想复制一组文件(或者一个目录,如果前者不可能的话)。您可以看看工具vcp。这是一个简单的复制工具,有两个进度条:一个用于当前文件,一个用于总体 编辑 以下是来源的链接: 手册页可在此处找到: 大多数发行版都有一个软件包。这里有另一个解决方案:使用工具bar 您可以这样调用它: #!/bin/bash filesize=$(du -sb
vcp
。这是一个简单的复制工具,有两个进度条:一个用于当前文件,一个用于总体
编辑
以下是来源的链接:
手册页可在此处找到:
大多数发行版都有一个软件包。这里有另一个解决方案:使用工具
bar
您可以这样调用它:
#!/bin/bash
filesize=$(du -sb ${1} | awk '{ print $1 }')
tar -cf - -C ${1} ./ | bar --size ${filesize} | tar -xf - -C ${2}
你必须通过tar,它在小文件上是不准确的。您还必须注意目标目录是否存在。但这是一种方法。有一个工具
pv
来做这件事:
apt中有一个ubuntu版本,您也可以使用
rsync
而不是cp
,如下所示:
#!/bin/bash
filesize=$(du -sb ${1} | awk '{ print $1 }')
tar -cf - -C ${1} ./ | bar --size ${filesize} | tar -xf - -C ${2}
rsync-Pa源目的地
这将给你一个进度条和预计完成时间。非常方便。要在递归复制文件、文件夹和子文件夹(包括链接和文件属性)时显示进度条,可以使用
gcp
(通过运行“sudo-apt-get-install-gcp”在Ubuntu和Debian中轻松安装):
以下是复制大型文件夹文件时的典型输出:
Copying 1.33 GiB 73% |##################### | 230.19 M/s ETA: 00:00:07
请注意,它只显示整个操作的一个进度条,而如果您希望每个文件都有一个进度条,则可以使用rsync
:
rsync -ah --progress SRC DEST
一种简单的unix方法是转到目标目录并执行
watch-n5du-s
。也许把它展示成酒吧会让它更漂亮。在只有标准unix UTIL而没有安装其他文件的范围的环境中,这会有所帮助。杜什是关键,手表是每5秒做一次。
优点:适用于任何unix系统缺点:无进度条我的首选选项是,因为它使用原始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中。您可以选择替换现有命令:
然后您可以像往常一样使用cp
,或者指定-g
来显示进度条:
$ cp -g src dest
像这样的怎么样
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目录中运行它。要添加另一个选项,可以使用
cpv
。它使用pv
来模仿cp
的用法
它的工作原理类似于pv
,但您可以使用它递归复制目录
您可以在下面的git存储库中查看源代码的进度条
还可以尝试自定义bash脚本包supreme来验证进度条如何与cp和mvcomands一起工作
功能概述
(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我希望有一些不需要编译外部工具的东西。我只想看到我的目录被复制。“真的这么难吗?”Anonymouse补充了第二个答案,也许这是你的另一个选择。但这是我的最后一个想法:(如下所述,rsync在所有系统上都可用(即使是Mac OS),与vcp相反。链接已断开。最近一次提交日期为2016年5月29日。我能够在Fedora 23上很好地编译它。一个具有类似概念的独立的
vcp
,目前在,但我还没有尝试过。您已经点击了。请查看一下,看看其中的任何建议是否有用。早些时候,我认为关于在移动文件夹之前给它涂上焦油,但认为它缺少太多的优雅。我错了。它工作正常,在某些情况下可能是一个更好的解决方案。谢谢!对,rsync--progress/path/to/origin/path/to/destination
非常棒,在所有系统上都可用。在复制单个文件时也可以工作。Happen要知道rsync和cp之间的速度比较?@Allasso很难说,因为影响它的选项和情况太多了。对于某些集合文件,它可能会慢一些,特别是使用小型CPU,因为它在分析/同步而不是复制和加密文件(通过网络时,iirc)例如,参见或复制多个文件,考虑使用<代码> GCP或dbus launch gcp-pR src dst
zwicke.org上的补丁链接已断开,但它位于github上。也许有比我技能更高的人会更新@elboletaire的步骤。这应该是选中的答案。如果复制多个文件,则进度条比rsync更好。比gcp更好,因为重复使用来自coreutils的标准cp代码。gcp的优点是它作为标准包分发。值得一提的是,您需要
|----Select File(s)
|----Inverse Selection
|----Make directory
|----Make file
|----Open
|----Copy
|----Move
|----Delete
|----Rename
|----Send to Device
|----Properties