2013-10-22 103 views
1

我正在使用scp命令從遠程服務器上拉出一些文件,並且該命令的一個變體不起作用。SCP命令澄清

我有one.xml 2個文件名和two.xml在遠程服務器中,我使用下面的命令拉動這兩個文件到當前目錄:

scp [email protected]:/student/class/Intermediate/one.xml . 
scp [email protected]:/student/class/Intermediate/two.xml . 

上面的命令工作正常,但如果我使用通配符來拉單杆所有的XML文件,如下圖所示,它返回scp: No match.

scp [email protected]:/student/class/Intermediate/*.xml . 

爲什麼它的工作,如果我單獨和工作不拉文件,如果我嘗試使用通配符來拉。

+1

這可能更適合向超級用戶詢問。 –

回答

1

是的,這是超級用戶。答案是因爲星號在命令運行之前進行了通配符擴展。它由你的外殼擴展。 echo *.xml真的會運行echo file1.xml file2.xml,這就是回聲看到的,而bash看到*.xml

由於您將多個文件和路徑傳遞給SCP,因此第一個參數(或第二個參數)不是主機:/路徑會變得混亂。

在你的命令前面放置'echo'來查看真正執行的內容。您不能在遠程主機上使用通配符(除非您先將其轉義)。

+0

說例如,如果我有本地file1.xml和file2.xml然後將被覆蓋,如果我沒有轉義使用該命令。當你提到「星號在命令運行之前進行了通配符擴展」之後,擴展echo * .xml將返回'echo:No match.',但是你提到它會擴展爲'echo file1.xml file2.xml'。你能詳細說明一下嗎? –

+0

在你的情況下,沒有scp不會覆蓋,因爲它會首先發生錯誤。你的本地shell將尋找一個以'stuadmin ...'開始並以'xml'結尾的文件名。如果echo表示'不匹配',那意味着沒有與* .xml匹配的本地文件。 'file1'和'file2'就是例子。 – Chloe

+0

在哪種情況下會覆蓋。 –

-1

您可以從這些結果

澄清可以簡化這個過程中有很多超過其他ssh連接隧道ssh連接(見前面的答案)。我願意做它的方式是建立在本地系統上的.ssh/config文件帶有以下各項:

Host SYSTEM3 
     ProxyCommand ssh -e none SYSTEM2 exec /usr/bin/nc %h %p 2>/dev/null 
     HostName  SYSTEM3.full.domain 
     User   system3user 

Host SYSTEM2 
     ProxyCommand ssh -e none SYSTEM1 exec /usr/bin/nc %h %p 2>/dev/null 
     HostName  SYSTEM2.full.domain 
     User   system2user 

Host SYSTEM1 
     HostName  SYSTEM1.full.domain 
     User   system1user 

(這是假設兩者的中間宿主已安裝的netcat作爲在/ usr/bin中/ NC - 如果沒有,你可能必須找到/安裝一些等效的stdin標準輸入到TCP會話的方式。)

通過這個設置,你可以在本地使用scp SYSTEM3:/ data/data,它會自動通過SYSTEM1和SYSTEM2隧道(並按順序詢問三個SYSTEMn的密碼 - 這可能有點令人困惑,尤其是如果您輸錯了一個)。