我正在server 1
上工作。我需要編寫一個Python腳本,我需要連接到一個server 2
,並從某個目錄中獲得某些文件(名稱以字母'HM'開頭的文件),並將它們放入另一個目錄中,該目錄需要在運行時創建(因爲對於程序的每次運行,都必須創建一個新目錄並且必須將文件轉儲到那裏),在server 1
上。我需要在Python中做到這一點,我對這種語言比較陌生。我不知道從哪裏開始的代碼。有沒有解決方案不涉及'tarring'文件?我通過paramiko瀏覽過,但是一次只傳輸一個文件給我所知。我甚至看過glob,但我無法弄清楚如何使用它。有人可以幫我拿出代碼嗎?Python腳本從一臺服務器獲取文件到另一臺服務器並將它們存儲在單獨的目錄中?
回答
傳輸的文件,你可能想看看的paramiko
import os
import paramiko
localpath = '~/pathNameForToday/'
os.system('mkdir ' + localpath)
ssh = paramiko.SSHClient()
ssh.load_host_keys(os.path.expanduser(os.path.join("~", ".ssh", "known_hosts")))
ssh.connect(server, username=username, password=password)
sftp = ssh.open_sftp()
sftp.get(remotepath, localpath)
sftp.close()
ssh.close()
我你想使用水珠你可以這樣做:
import os
import re
import glob
filesiwant = re.compile('^HM.+') #if your files follow a more specific pattern and you don't know regular expressions you can give me a sample name and i'll give you the regex4it
path = '/server2/filedir/'
for infile in glob.glob(os.path.join(path, '*')):
if filesiwant.match(infile):
print "current file is: " + infile
否則一個更容易的選擇是使用os.listdi r()
import os
for infile in os.listdir('/server2/filedir/'):
...`
是否回答你的問題?如果沒有留下評論
我需要在運行時指定「服務器2」(我將每次執行程序時)的目錄。據我所知paramiko不允許基於目錄的傳輸。那裏必須是一個文件名。但我偶爾不會知道所有以'HM' – user1452759
開頭的文件的名字,爲了得到遠程目錄中的文件列表,你可以在我的第一塊代碼中使用名爲'sftp'的變量,如下所示: 'listOfFiles = sftp.listdir(remotedirectory)',那麼你就可以遍歷這些並將名稱和模式匹配起來,就像我在第二塊代碼中所顯示的那樣。那對你有用嗎? – pythonian29033
我實際上使用了這段代碼的一個變體,並得到了我想要的。我沒有使用sftp.listdir(remotedirectory)。我使用exec_command來獲取文件列表,將它們存儲在varibale中,然後相應地從遠程服務器獲取它們,但我一定會查看sftp.listdir。謝謝你的幫助!非常感激! – user1452759
Python不會是我的第一選擇,但您可以使用對系統的調用並運行mkdir和rsync。特別是你可以做
import os
os.system("mkdir DIRECTORY")
os.system("rsync -cav [email protected]:/path/to/files/HM* DIRECTORY/")
你可以使用fabric
。在Server1上創建fabfile.py
:
import os
from fabric.api import get, hosts
@hosts('server2')
def download(localdir):
os.makedirs(localdir) # create dir or raise an error if it already exists
return get('/remote/dir/HM*', localdir) # download HM files to localdir
並運行:fab download:/to/dir
從同一目錄在shell(fabfile.py
是fab
爲Makefile
是make
)。
我收到以下錯誤: 致命錯誤:找不到任何fabfiles! – user1452759
執行'fabfile.py'時我犯了一個錯誤嗎? – user1452759
@ user1452759:使用'fabfile.py'從目錄運行'fab'。 – jfs
只需使用ssh和tar。沒有必要讓Python的參與
$ ssh server2 tar cf - HM* | tar xf -
遠程焦油可以通過管道直接進入當地的焦油
我需要編寫一個腳本來執行此操作。我選擇了Python。 – user1452759
如果我們將這作爲python腳本的一部分來完成,那麼在python中做其他事情時,最好使用python函數。 –
@EL_DON,對我來說,這取決於情況。有時候最好將子進程內置到爲簡單腳本添加更多依賴的工具中。 –
- 1. 在java中將目錄,子目錄和文件從一臺服務器複製到另一臺服務器
- 2. 如何在Python中從一臺服務器獲取某些類型的文件到另一臺服務器?
- 3. 將文件從一臺服務器發送到另一臺服務器。
- 4. 將文件從一臺遠程服務器發佈到另一臺服務器
- 5. 將json文件從一臺服務器複製到另一臺服務器
- 6. 將大量文件從一臺服務器轉移到另一臺服務器
- 7. 將文件從一臺服務器上傳到另一臺服務器
- 8. 如何將文件從一臺服務器移動到另一臺服務器
- 9. PHP腳本從另一臺服務器獲取文件並保存在我的服務器上
- 10. JSONP並將cookies從一臺服務器共享到另一臺服務器?
- 11. 用git從一臺服務器推到另一臺服務器
- 12. Shell腳本將文件從一臺服務器複製到另一臺
- 13. 將文件從一臺服務器複製到另一臺
- 14. 將Java文件從一臺服務器複製到另一臺
- 15. 批處理腳本將文件從一臺服務器移動到超過45天的另一臺服務器
- 16. 將唯一記錄從一臺服務器插入另一臺服務器
- 17. 將腳本從一臺服務器複製到另一臺服務器的Unix腳本
- 18. 將腳本從一臺Linux服務器移動到另一臺服務器的PHP腳本?
- 19. 試圖通過shell腳本將文件從一臺服務器複製到另一臺服務器
- 20. 從另一臺服務器
- 21. 從另一臺服務器
- 22. 將XML文件從一臺服務器讀取到同一網絡上的另一臺服務器
- 23. 如何實時備份一臺獨立服務器到另一臺服務器?
- 24. 從另一臺服務器獲取最新目錄
- 25. 從服務器檢查另一臺服務器上的文件
- 26. 將文件從服務器上傳到另一臺服務器中的Hdfs
- 27. 文件流 - 到另一臺服務器
- 28. 將代碼從一臺TFS服務器移動到另一臺服務器
- 29. 將php變量從一臺服務器轉移到另一臺服務器
- 30. 將WordPress站點從一臺服務器遷移到另一臺服務器
在將文件移動之前是否有任何問題? – avasal
這不是直接的答案,但它聽起來像[織物](http://docs.fabfile。 org/en/1.4.3/index.html) – kojiro
@avasal我只是不想打他們,因爲我認爲這會花費很多時間。 – user1452759