gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 01:00:44 29 4
gpt4 key购买 nike

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

我不确定如何在下面的 shell 脚本中使用 rsync 代替 scp。我正在尝试查看 rsync 在传输速度方面是否比 scp 具有更好的性能。

下面是我的问题描述-

我正在将文件从 machineBmachineC 复制到 machineA 中,因为我在 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 命令,但我仍然想为 PRIMARYSECONDARY 同时进行?

最佳答案

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

虽然它可以用于传输单个文件,但它不会帮助您像那样使用,除非您已经在每一端都有一个文件版本,并且它们之间存在细微差别。在层次结构中的单个文件上并行运行 rsync 的多个实例违背了该工具的目的。

虽然 triplee 是正确的,您的任务是 I/O 绑定(bind)而不是 CPU 绑定(bind),因此并行化任务在典型情况下无济于事,无论您使用的是 rsync 还是 scp,在一种情况下并行化网络传输可以提供帮助:如果发送方正在限制请求。在那种情况下,为许多不同的文件夹中的每一个运行 rsync 实例可能有一些值(value),但它会使您的代码复杂化,并且您有分析这两种解决方案,以发现您是否真的从中受益。

简而言之:只需运行一个 rsync 实例;您从另一种方法中获得的任何性能提升都不太值得。

关于linux - 如何在我下面的 shell 脚本中使用 rsync 而不是 scp 来复制文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23800094/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com