Answers:
采用 rsync --progress [SRC] [DST]
请检查man rsync
页面,因为它有很多非常有用的选项。-a
存档是一个好的开始,但这取决于您的确切要求。
通过管道进行复制会不必要地减慢复制过程,尤其是基于文件的复制过程。
您可以使用tar
或pax
或cpio
:
mkdir -p dst &&
(cd src && tar cf - .) | pv -trb | (cd dst && tar xpf -)
v
在tar
命令中添加一个以查看文件名。
tar cf -
输出包含文件及其元数据的流,该流通过管道馈送到pv,pv tar
在打印进度指示时将其原封不动地馈给另一个,然后另一个tar
提取该流中的数据。这三个命令同时运行并处理数据,磁盘上没有存储任何内容,除了管道缓冲区和命令内部缓冲区(仅几千字节)以外,内存中也没有任何存储。
pv
无法知道要传输多少数据。如果您有量的估计值,你可以用它传递给它-s
的选项(GNU du -sb src
会给你一个很好的近似,如果文件足够大)
以下是一些用于复制包含进度信息的目录的命令。
如果有很多小文件:
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的优点是当您通过网络进行复制或更新(或比较)先前的副本时。
请参阅此处以获取更多详细信息:
find source-dir -print0 | xargs -0 -I % pv % > dest-dir/%