2016-10-28 62 views
0

我在網上搜了很多,但一直沒有找到任何有用的信息。 PFTP是否不允許你像'IF'和'WHILE'一樣運行循環?PSFTP可以執行循環嗎?

如果是這樣,請讓我知道語法,我試着將我的頭撞向它。令人煩惱的是,PuTTY允許這些命令,但即使兩者都來自同一個家族,psftp似乎也沒有。我真的希望有一個解決方案!

+0

沒有。 psftp不是「編程語言」。如果你想循環,你可以使用某些東西,並使用其他的東西來發送命令到psftp。 –

+0

謝謝@MarcB這很有道理。但我不確定如何實現這一點。我想用while循環來檢查遠程服務器上是否有特定的文件被刪除,如果它已經從服務器上下載了日誌文件,例如'while [! -f /tmp/foo.txt];睡2;完成 得到FileWriter1.log' –

+0

然後不要使用psftp。使用其他支持sftp連接的語言,並在那裏進行循環。 –

回答

0

PSFTP不是一種語言。它只是一個SFTP客戶端。 SFTP本身就是在計算機之間移動文件的協議。如果您在遠程計算機上設置了SFTP,那麼它表明您已經運行了SSH(因爲SFTP通常與SSH服務器安裝捆綁在一起)。

例如,您可以在bash shell腳本中進行測試,以查看該文件是否存在於遠程服務器上,然後根據結果執行psftp命令。像這樣:

#!/bin/bash 

# test if file exists on remote system 
fileExists=$(ssh [email protected] "test -f /tmp/foo && echo 'true' || echo 'false'") 

if $fileExists; then 
    psftp <whatever> 
fi 

你可以把這整個混亂在一個循環或whatevs。這裏發生的是我們發送一個命令test -f /tmp/foo && echo 'true' || echo 'false'到遠程計算機執行。該命令的stdout被返回並存儲在變量fileExists中。然後,我們只是測試它。

如果您在Windows中,您可以將其轉換爲批處理腳本並使用plink.exe發送命令kind of like they do here。或者,也許只需在您的計算機上用SSH和SFTP客戶端來使用cygwin,並使用上述內容即可。

這裏需要注意的是,您需要一個單獨的腳本環境來執行循環,並根據測試運行psftp。

+0

謝謝@ JNevill!這真的很有幫助,我會嘗試一下,讓你知道它是如何去或打擾你的更多的幫助,如果我面臨任何問題:) –

+0

這工作完美,謝謝JNevill!只有1個問題我面對這個問題 - 用戶名密碼不能在批處理文件中提供,並且在調用批處理文件時必須在命令行上單獨完成。我使用了下面的代碼:'plink username @ host -pw password -m「C:\ PATH \ PlinkTest.bat」-v' –

+0

另外,如果文件存在,我想從遠程服務器檢索日誌文件。我使用了下面的代碼:'if $ fileExists;然後「Q:\ PuTTY \ psftp cd/home/LOGS /」「Q:\ PuTTY \ psftp獲取FileLog.log」'但這不起作用。我顯然不是在這裏正確傳遞命令,但我不知道正確的語法是什麼。你能幫忙嗎?另外,您能否請教如何以遞歸方式調用它,以便如果文件不存在,它會繼續檢查,直到出現文件,然後像上面那樣下載日誌文件? –