bash 配列を反復処理して SCP コマンドを効率的に作成するにはどうすればよいですか?

bash 配列を反復処理して SCP コマンドを効率的に作成するにはどうすればよいですか?

から へmachineBファイルを scp する必要があります。 から以下のシェル スクリプトを実行しています。 ssh キーを適切に設定しました。machineCmachineAmachineA

ファイルが にない場合は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]今のところ (これは間違っています)、これを に置き換える必要があります。PARTITIONつまり、PARTITION 内の各番号を繰り返してPARTITION置き換える必要があるということです[$el]

PARTITIONしたがって、 1つずつ繰り返すと、scpコマンドは次のようになります。

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/.

問題文:-

  1. 上記の SCP コマンドを作成できるように、PARTITION をこのように反復するにはどうすればよいですか?
  2. また、ご覧のとおり、ファイルを 1 つずつmachineA /data01/primary/フォルダーにコピーしています。これを行うより良い方法はありますか? つまり、1 つずつ行うのではなく、すべてのファイルを一度にコピーできますか?

答え1

PARTITION配列を次のように反復処理できます。

for el in "${PARTITION[@]}"
do
    echo "$el"
done

答え2

このタイプのバックアップに全般的に優れた機能を提供するため、このタスクを完了するには を検討することをお勧めしますrsync。これをマシン A から実行し、B と C のスナップショット ディレクトリを指定すると、スナップショット ディレクトリ全体がミラーリングされます。

その後、 を使用して、cronこれを設定された間隔でスケジュールすることができます。 は scp1 回限りのコピーには理想的ですが、シナリオは定期的なバックアップ ジョブのように思えます。 rsyncまた、標準の SSH ポート経由で通信するため、scp現在動作している場合は、ネットワーク、ファイアウォールなどを変更する必要はありません。

rsync必要に応じて、3 つのサーバーすべてに同一のミラーを作成する機能を実装することもできます。

関連情報