2010-07-31 45 views
0

我似乎無法說服scp行爲。如何腳本scp -r copy?

測試數據

[email protected]:/tmp$ find /tmp/a1/ 
/tmp/a1/ 
/tmp/a1/a2 
/tmp/a1/a2/a3 

在發出命令

[email protected]:/tmp$ scp -r /tmp/a1 domU-12-31-38-00-E2-52.compute-1.internal:/tmp/a1 

我希望在domU的-12-31-38-00-E2-52.compute-創建的目錄結構1.internal,無論目錄主機上是否存在目錄/ tmp/a1。相反,什麼SCP實際上創建具有以下結構(如果存在目標主機上的/ tmp/A1)

[email protected]:/tmp$ ssh domU-12-31-38-00-E2-52.compute-1.internal find /tmp/a1 
/tmp/a1 
/tmp/a1/a1 
/tmp/a1/a1/a2 
/tmp/a1/a1/a2/a3 

如何SCP被迫複製到指定目錄作爲操作的根源在哪裏?

稍後,我想對此操作進行腳本編寫,以便主設備上給定的目錄路徑可以調用將同一目錄結構複製到所有從設備的腳本。請注意,rsync行爲(至少從我測試過的)在這種情況下是相同的。

謝謝, Maxim。

回答

2

scp模仿cp的行爲,即複製INTO目標目錄(如果存在)。請將其複製到/tmp而不是/tmp/a1

+0

我不認爲它會在所有情況下作爲一般複製到奴隸實用程序的工作。你的建議意味着我需要找到一個參數的絕對路徑,然後決定它是否是一個目錄。如果它是在構建scp命令之前剝去一層。沒有更簡單的解決方案,「腳本更友好嗎?」 – 2010-07-31 19:41:16

+0

您也可以將文件剝去一層。我認爲這不需要有條件。 'dirname'會爲你做到這一點。您需要小心路徑盡頭的斜槓。 – 2010-08-01 00:48:03

0

而不是使用 $ scp -r /tmp/a1 使用這樣的: $ scp -r /tmp/a1/* ,將每個文件複製在/ tmp/A1,所以你得到的目的地的結構將 的/ tmp/A1/A2/A3 否則,我會建議將目標目錄簡單地設置爲「/ tmp /」,而不是「/ tmp/a1 /」,無論哪種方式都可以。關於rsync,不,它是不一樣的:**this/**到rsync意味着**this/**根據scpcp。尾斜槓[this/]表示複製文件夾的內容。如果將尾部斜槓關閉,它將複製目錄本身[如果遞歸]。

希望你發現這個有用。 :) 馬特