通过pv进行进度信息以进行目录复制


14

我需要复制一个非常大的目录(此处以兆字节为单位),并希望监视进度。

我发现这pv是一个不错的实用程序,但是如何使用它递归复制目录?(pv src > dst因为它们是目录,所以不起作用)

PS:在OS X Mountain Lion上运行,pv是从Mac Ports安装的

Answers:


21

采用 rsync --progress [SRC] [DST]

请检查man rsync页面,因为它有很多非常有用的选项。-a存档是一个好的开始,但这取决于您的确切要求。

通过管道进行复制会不必要地减慢复制过程,尤其是基于文件的复制过程。


为什么通过管道复制会减慢该过程?我想说,管道提供的缓冲以及与管道相关的多任务处理可能会有所帮助。(并且rsync是多进程,并在IIRC内部使用管道)。什么是不基于文件的复制过程?
斯特凡Chazelas

Bash很方便,但是不快。特别是在将一个命令传递给另一个命令时。
jippie 2012年

@StephaneChazelas:因为管道的缓冲区只有8KB。诸如rsync之类的程序可能希望使用更大的内部缓冲区。
Zan Lynx 2012年

10

您可以使用tarpaxcpio

mkdir -p dst &&
  (cd src && tar cf - .) | pv -trb | (cd dst && tar xpf -)

1
另外,您可以vtar命令中添加一个以查看文件名。
彼得2014年

因此,这将在复制之前压缩源文件夹,对吗?我的文件夹大小为5 TB,所以我不确定这是否是最佳方法吗?我非常喜欢使用PV,因为它显示出非常好的进度状态,请问任何建议吗?

@Tak,不,因为没有压缩,它不会压缩任何东西。tar cf -输出包含文件及其元数据的流,该流通过管道馈送到pv,pv tar在打印进度指示时将其原封不动地馈给另一个,然后另一个tar提取该流中的数据。这三个命令同时运行并处理数据,磁盘上没有存储任何内容,除了管道缓冲区和命令内部缓冲区(仅几千字节)以外,内存中也没有任何存储。
斯特凡Chazelas

@StéphaneChazelas感谢您的评论。我已经尝试过并且可以正常工作,唯一的问题是进度条没有显示预期的百分比,该百分比一直在从左到右移动。知道为什么吗?我使用了带有参数-petra的pv,它通常显示进度条,其中进度条会不断填充直到完成。我也赞成你的回答。

@Tak,pv无法知道要传输多少数据。如果您有量的估计值,你可以用它传递给它-s的选项(GNU du -sb src会给你一个很好的近似,如果文件足够大)
斯特凡Chazelas

2

柏油。

tar -cf - /var/log/ | pv | tar -C . -x

例:

# tar -cf - /var/log/ | pv | tar -C . -x
tar: Removing leading `/' from member names
58MB 0:00:05 [ 2.2MB/s] [                   <=> 

1

以下是一些用于复制包含进度信息的目录的命令。


如果有很多小文件:

cp -av sourcedir targetdir | pv -l -s filecount > logfile

这将根据复制的文件数报告进度。

/dev/null如果不需要,您可以重定向到logfile

使用以下命令获取filecount

find sourcedir | wc -l

如果很少有大文件:

tar c sourcedir | pv -s size | tar x -C targetdir

这将根据复制的字节报告进度。

targetdir 必须存在。

使用以下命令获取size

du -sh sourcedir

如果要使用rsync:

rsync -ai sourcedir/ targetdir/ | pv -l -s filecount > logfile

得到filecount如上所示。

如果要在同一系统上进行复制,rsync -a则实际上与相同cp -a。rsync的优点是当您通过网络进行复制或更新(或比较)先前的副本时。

请参阅此处以获取更多详细信息:


0

您可以在执行du -b /directory/普通复制命令的同时在源和目标上执行a ,然后将两者进行比较。这同样有效,并且不会通过将其推入管道来减慢复制过程。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.