2014-01-30 32 views
0

這更像是一個理論問題,但假設我有一個主Rsync腳本,我想用它將多個遠程主機備份到同一個目的地。在Bash中使用參數循環列表:如何?

我想有腳本讀取包含主機名稱,來源,目的地每一行的文本文件,沿着這個線路:

host-one.example.com /Volumes/data /Volumes/host-one-backup 
host-two.example.com /Volumes/Users /Volumes/host-two-backup 
host-three.example.com /Volume/apps /Volumes/host-three-backup 

然後一個簡單的Rsync腳本將在每個POP在這三個值中,運行該Rsync作業,然後轉到下一個循環腳本等。

除了如何將三個值作爲腳本中的變量讀取外,我對一切都很滿意。

您的想法或建議非常感謝!

乾杯,丹

回答

0
while read hostname source destination; do 
    rsync -a "$hostname:$source" "$destination" 
done < backup-list.txt 

涼爽/棘手的部分是治療整個循環作爲化合物命令和應用重定向到它。這會導致每個read調用都從文件中讀取一行,因爲stdin在循環的持續時間內被重定向。

+0

如果這是這麼簡單,我會很尷尬,但很高興我問過!讓我給它一個旋轉... – Dan

+0

嘿約翰,這似乎工作 - 謝謝一堆建議這樣一個簡單和優雅的解決方案。只是好奇,我可以讀取由垂直管道分隔的值|或其他角色? – Dan

+0

也想出了我的最後一個問題:'while IFS ='|'讀取-r主機名源目標;做rsync -a「$ hostname:$ source」「$ destination」done Dan