Bash 배열을 반복하고 SCP 명령을 효율적으로 작성하려면 어떻게 해야 합니까?

Bash 배열을 반복하고 SCP 명령을 효율적으로 작성하려면 어떻게 해야 합니까?

machineB에서 파일을 scp해야 machineC합니다 machineA. 에서 아래 쉘 스크립트를 실행하고 있습니다 machineA. 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]지금은 (잘못된 것입니다) 이것을 로 바꿔야 한다는 것입니다. 즉 , PARTITION의 각 숫자를 PARTITION반복 PARTITION하고 바꿔야 함을 의미합니다.[$el]

PARTITION따라서 내 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. 그리고 보시다시피 파일을 하나씩 machineA /data01/primary/폴더에 복사하고 있습니다. 이 작업을 수행하는 더 좋은 방법이 있나요? 즉, 모든 파일을 하나씩 복사하는 대신 한 번에 함께 복사할 수 있습니까?

답변1

다음과 같이 PARTITION 배열을 반복할 수 있습니다.

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

답변2

rsync이 유형의 백업에 대해 전반적으로 더 많은 기능을 제공하므로 이 작업을 완료하는 것이 좋습니다 . B와 C의 스냅샷 디렉토리를 가리키도록 machineA에서 이를 실행할 수 있으며 전체 스냅샷 디렉토리가 미러링됩니다.

cron그런 다음 설정된 간격으로 이를 예약하는 데 사용할 수 있습니다 . scp일회용 복사본에 이상적이지만 귀하의 시나리오는 일반 백업 작업처럼 들립니다. rsync또한 표준 SSH 포트를 통해 통신하므로 scp현재 작동한다면 네트워크, 방화벽 등을 변경할 필요가 없습니다.

rsync필요한 경우 세 서버 모두에 동일한 미러를 생성하는 기능을 구현할 수도 있습니다 .

관련 정보