cp命令太慢?竟然存在更快的命令!

文章目录

  • 1. 前言
  • 2. 命令一: cp
  • 3. 命令二:tar
  • 4. 命令三:rsync
  • 5. 命令四:cpio
  • 6. 结论

1. 前言

  在Linux环境下进行文件复制,通常就是用cp命令。对于绝大多数人来说,由于它的通用性,该命令已经倒背如流。近来工作要频繁对文件进行复制,然后再进行处理。可不幸的是,常用的cp命令用起来却是好慢好慢。
cp命令太慢?竟然存在更快的命令!_第1张图片
  为了提高效率,便打开谷歌搜索,寻找更好的解决方案。经过调研,得到了其余几个复制的命令,为了帮助大家,特意将命令分享如下(如果不想了解过程的,想直接看结论的同学可以直接翻到文章末尾)。

  下面就以指定的文件夹(/home/learn/files)为例进行实验和对比,为了让大家对该文件夹有更加直观的认识,先使用shell命令进行文件大小的分布情况进行统计。分为以下几个段大小进行统计:小于1K、 1K - 4K、 4K - 1M、1M - 10M、 10M - 1G、 1G 以上:

bins=('0-1k','1k-4k','4k-1m','1m-10m','10m-1g','1g-inf')
ls -Rla | awk '{print $9, $5}' | column -t | awk -v bins_str=$bins 'BEGIN{split(bins_str,bins,",");ttl=0} ($2 <= 1024) {a[1]++} (1024 < $2 && $2 <= 4096) {a[2]++} (4096 < $2 && $2 <= 1048576) {a[3]++} (1048576 < $2 && $2 <= 10485760) {a[4]++} (10485760 < $2 && $2 <= 1073741824) {a[5]++} (1073741824 < $2 ) {a[6]++} {ttl++} END {for(i=0;i

  结果如下所示:

范围 个数 比例
0-1k 51952 99.7964%
1k-4k 4 0.00768374%
4k-1m 41 0.0787583%
1m-10m 5 0.00960467%
10m-1g 56 0.107572%

2. 命令一: cp

time cp -a /home/learn/files /home/learn/test/cp
real    6m7.699s
user    0m0.568s
sys     0m48.372s

3. 命令二:tar

time (cd /home/learn/files; tar c .) | (cd /home/learn/test/tar ; tar x)
real    2m7.848s
user    0m1.209s
sys     1m12.826s

4. 命令三:rsync

time (cd /home/learn/files; rsync -a . /home/learn/test/rsync)
real    9m14.021s
user    4m8.799s
sys     3m10.757s

5. 命令四:cpio

time (cd /home/learn/files; find . -xdev) | cpio -pmd /home/learn/test/cpio
real    9m23.032s
user    0m7.435s
sys     1m35.024s

6. 结论

命令 时间
cp 6m7.7s
tar 2m7.8s
rsync 9m14s
cpio 9m23s

  tar命令是最快的

  rsync虽然速度很慢,但是它支持断点续传。所以它可以用来复制差异文件。

你可能感兴趣的:(linux)