linux – 如何在我的下面的shell脚本中使用rsync而不是scp来复制文件?

我正在使用scp并行使用GNU并行复制文件与我的下面的 shell脚本,它工作正常.

我不知道如何在下面的shell脚本中使用rsync代替scp.我试图看看rsync与传输速度方面的scp相比是否会有更好的性能.

以下是我的问题描述 –

当我在machineA上运行我的下面的shell脚本时,我正在将文件从machineB和machineC复制到machineA中.

如果文件不在machineB中,那么它应该在machineC中,因为我会首先尝试从machineB复制文件,如果它不在machineB中,那么我将尝试从machineC复制相同的文件.

我使用GNU Parallel库并行复制文件,它工作正常.目前我正在为PRIMARY和SECONDARY并行复制五个文件.

下面是我的shell脚本 – 我有 –

#!/bin/bash

export PRIMARY=/test01/primary
export SECONDARY=/test02/secondary
readonly FILERS_LOCATION=(machineB machineC)
export FILERS_LOCATION_1=${FILERS_LOCATION[0]}
export FILERS_LOCATION_2=${FILERS_LOCATION[1]}
PRIMARY_PARTITION=(550 274 2 546 278) # this will have more file numbers
SECONDARY_PARTITION=(1643 1103 1372 1096 1369 1568) # this will have more file numbers

export dir3=/testing/snapshot/20140103

do_Copy() {
  el=$1
  PRIMSEC=$2
  scp david@$FILERS_LOCATION_1:$dir3/new_weekly_2014_"$el"_200003_5.data $PRIMSEC/. || scp david@$FILERS_LOCATION_2:$dir3/new_weekly_2014_"$el"_200003_5.data $PRIMSEC/.
}
export -f do_Copy

parallel --retries 10 -j 5 do_Copy {} $PRIMARY ::: "${PRIMARY_PARTITION[@]}" &
parallel --retries 10 -j 5 do_Copy {} $SECONDARY ::: "${SECONDARY_PARTITION[@]}" &
wait

echo "All files copied."

有没有办法用rsync替换我的上面的scp命令,但是我还想同时为PRIMARY和SECONDARY并行复制5个文件?

解决方法

rsync旨在有效地同步文件夹和文件的两个层次结构.

虽然它可以用来传输单个文件,但是除非你已经在每一端都有一个版本的文件,它们之间的差别很小,否则它对你的使用非常有帮助.在层次结构中的各个文件上并行运行多个rsync实例会破坏该工具的用途.

虽然三元组是正确的,你的任务是I / O绑定而不是CPU绑定,因此在典型的情况下并行化任务无助于你使用rsync还是scp,有一种情况是并行化网络传输可以提供帮助:如果发件人限制请求.在这种情况下,为许多不同的文件夹中的每一个运行rsync实例可能有一些价值,但它会使您的代码复杂化,并且您必须分析这两个解决方案以发现您是否真正获得了任何好处.

简而言之:只运行一个rsync实例;你从另一种方法中获得的性能提升不太可能是值得的.

相关文章

/etc/sysctl.conf这个目录主要是配置一些系统信息,/etc/sys...
1.作用 useradd或adduser命令用来建立用户帐号和创建用户的起...
它们都是多模式编辑器,不同的是vim 是vi的升级版本,它不仅...
不管是我们在安装软件还是监测软件的使用性能,我们都要随时...
装好Tomcat7后,发现除了本机能访问外界访问不了,岂有此理。...
修改防火墙配置需要修改 /etc/sysconfig/iptables 这个文件,...