利用Python3在Windows同步文件到Linux服務器

以前一直搞JavaEE,在本地開發修改的文件,常常須要同步到本身的Linux服務器上,因爲有時候修改比較頻繁,網絡也不是特別好,因此都不是直接一個war包扔到服務器。java

雖然WinSCP等工具已經有同步文件夾功能,不過本身仍是閒得搞了一個,也順便練練手。。。功能也還沒WinSCP等工具那麼強大,只能同步指定路徑下的全部文件。。之後再慢慢改json

用的是Python3.5,paramiko2.0小程序

#!-*- coding: utf-8 -*-
"""
練手小程序
"""
import json
import paramiko
import os


def list_file(file_path):
    return [file for file in os.listdir(file_path) if os.path.isfile(os.path.join(file_path, file))]


sync_file_count = 0
HOST_IP = "服務器IP"
HOST_PORT = 22
USERNAME = "登陸名"
PASSWORD = "密碼"

with open("config.json") as config_file:
    path_config = json.load(config_file)
print("讀取配置文件成功!")

try:
    transport = paramiko.Transport((HOST_IP, HOST_PORT))
    transport.connect(username=USERNAME, password=PASSWORD)
    sftp = paramiko.SFTPClient.from_transport(transport)
    print("鏈接遠程服務器成功!")
    print("*******************************同步文件--開始")
    for path in path_config:
        local_path = path["local_path"]
        server_path = path["server_path"]
        print(">>>>>>>>>>>>>>>遍歷本地文件--開始")
        filenames = list_file(local_path)
        print(filenames)
        print(">>>>>>>>>>>>>>>遍歷本地文件--結束")
        for filename in filenames:
            sftp.put(local_path + filename, server_path + filename)
            print("已同步本地文件: \"" + local_path + filename + "\"  到服務器路徑:\"" + server_path + filename + "\"")
            sync_file_count += 1

    print("*******************************同步文件--結束")
finally:
    sftp.close()
    transport.close()

print("已經所有同步完成!一共同步了 " + str(sync_file_count) + " 個文件!")

 

還有個配置文件,配置本地目錄地址,和遠程目錄地址服務器

[
  {
    "local_path":"G:/Java/",
    "server_path":"/home/java/"
  },
  {
    "local_path":"G:/out/",
    "server_path":"/home/out/"
  }
]
相關文章
相關標籤/搜索