Linux
如何迭代 bash 數組並有效地創建 SCP 命令?
我需要從
machineB
和machineC
到scp 文件machineA
。我正在執行我的下面的 shell 腳本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
並替換[$el]
為 PARTITION 中的每個數字。
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/.
問題陳述:-
- 如何以這種方式迭代 PARTITION,以便我可以製作上述 SCP 命令?
- 而且,如您所見,我正在將文件一一複製到文件
machineA
/data01/primary/
夾中。有沒有更好的方法來做到這一點?意思是,我可以一次將所有文件複製在一起而不是一個一個地複制嗎?
您可以像這樣遍歷 PARTITION 數組
for el in "${PARTITION[@]}" do echo "$el" done
我建議查看
rsync
完成這項任務,因為它為這種類型的備份提供了更全面的功能。您可以從 machineA 執行此操作,將其指向 B 和 C 上的快照目錄,然後您的整個快照目錄將被鏡像。然後,您可以使用
cron
以設定的時間間隔進行安排。scp
是一次性副本的理想選擇,但您的方案聽起來像是一項正常備份工作。rsync
還通過標準 SSH 埠進行通信,因此如果scp
目前可以正常工作,則無需更改網路、防火牆等。
rsync
如果需要,您甚至可以實現在所有三台伺服器上創建相同鏡像的功能。