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实例;你从另一种方法中获得的性能提升不太可能是值得的. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |