我需要scp从machineB和machineC到machineA的文件。 我从machineA运行我的下面的shell脚本。 我已经正确设置了ssh密钥。
如果这些文件不在machineB ,那么它应该在machineC 。
#!/bin/bash readonly PRIMARY=/data01/primary/. readonly FILERS_LOCATION=(machineB machineC) readonly MAPPED_LOCATION=/bat/data/snapshot PARTITION=(0 3 5 7 9) dir1=/bat/data/snapshot/20131222 dir2=/bat/data/snapshot/20131222 scp david@${FILERS_LOCATION[0]}:$dir1/weekly_1980_[$el]_200003_5.data $PRIMARY || scp david@${FILERS_LOCATION[1]}:$dir2/weekly_1980_[$el]_200003_5.data $PRIMARY
现在我的问题是,如果你看看我的上面的scp命令,我现在有[$el] (这是错误的),我需要用PARTITIONreplace这个,这意味着我需要迭代PARTITION并将[$el]每个数字在PARTITION中。
所以我的scp命令应该看起来像这样,如果我迭代PARTITION一个 –
scp david@machineB:/bat/data/snapshot/20131222/weekly_1980_0_200003_5.data /data01/primary/. || scp david@machineC:/bat/data/snapshot/20131222/weekly_1980_0_200003_5.data /data01/primary/. scp david@machineB:/bat/data/snapshot/20131222/weekly_1980_3_200003_5.data /data01/primary/. || scp david@machineC:/bat/data/snapshot/20131222/weekly_1980_3_200003_5.data /data01/primary/. scp david@machineB:/bat/data/snapshot/20131222/weekly_1980_5_200003_5.data /data01/primary/. || scp david@machineC:/bat/data/snapshot/20131222/weekly_1980_5_200003_5.data /data01/primary/. scp david@machineB:/bat/data/snapshot/20131222/weekly_1980_7_200003_5.data /data01/primary/. || scp david@machineC:/bat/data/snapshot/20131222/weekly_1980_7_200003_5.data /data01/primary/. scp david@machineB:/bat/data/snapshot/20131222/weekly_1980_9_200003_5.data /data01/primary/. || scp david@machineC:/bat/data/snapshot/20131222/weekly_1980_9_200003_5.data /data01/primary/.
问题陈述:-
machineA /data01/primary/文件夹中。 有没有更好的方法来做到这一点? 这意味着,我可以一次性复制所有的文件,而不是一个一个地复制吗? 你可以像这样迭代PARTITION数组
for el in "${PARTITION[@]}" do echo "$el" done
我build议看看rsync来完成这个任务,因为它为这种types的备份提供了更全面的function。 您可以从machineA执行此操作,将它指向B&C上的快照目录,并且您的整个快照目录将被镜像。
然后你可以使用cron来设定这个间隔。 scp是一次性副本的理想select,但是您的场景听起来像是一个常规的备份工作。 rsync还可以通过标准的SSH端口进行通信,所以如果scp目前工作,就不需要更改networking,防火墙等。
使用rsync ,甚至可以实现在所有三台服务器上创build相同镜像的function(如果需要的话)。