You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
95 lines
3.9 KiB
95 lines
3.9 KiB
import os
|
|
import shutil
|
|
import paramiko
|
|
import argparse
|
|
import Contant
|
|
from LoggerUtils import Logger, initLogger
|
|
import configparser
|
|
import requests
|
|
import time
|
|
import json
|
|
|
|
|
|
def upload(path, remote):
|
|
pass
|
|
|
|
|
|
if __name__ == "__main__":
|
|
# 读取配置文件
|
|
with open('sftp_config.json', 'r', encoding='utf-8') as f:
|
|
# 使用json.load()方法读取文件内容
|
|
data = json.load(f)
|
|
# 初始化日志
|
|
Contant.logDir = data['log']['dir']
|
|
Contant.logFileName = data['log']['fileName']
|
|
initLogger(Contant.logDir, Contant.logFileName)
|
|
|
|
# 设置sftp client
|
|
hostname = data['sftp']['hostname']
|
|
port = data['sftp']['port']
|
|
username = data['sftp']['username']
|
|
password = data['sftp']['password']
|
|
|
|
Logger.info("host:{},port:{},username:{},password:{}".format(
|
|
hostname, port, username, password))
|
|
|
|
ssh_client = paramiko.SSHClient()
|
|
ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
|
|
sftp_client = None # 设置默认值
|
|
ssh_client.connect(hostname, port, username, password)
|
|
# 创建SFTP客户端
|
|
sftp_client = ssh_client.open_sftp()
|
|
Logger.info("SFTP客户端已经建立:{}".format(sftp_client))
|
|
|
|
remote_root = "/Inbound/YouTube Captions"
|
|
local_root = data['sftp']['local']
|
|
Logger.info("remote_root:{},local_root:{}".format(remote_root, local_root))
|
|
|
|
# 遍历所有文件,然后上传
|
|
region_names = os.listdir(local_root)
|
|
for region_name in region_names:
|
|
# sftp创建region文件夹
|
|
try:
|
|
sftp_client.chdir(remote_root + "/" + region_name)
|
|
except BaseException:
|
|
Logger.info(f"create region dir: {remote_root}/{region_name}")
|
|
sftp_client.mkdir(remote_root + "/" + region_name)
|
|
sftp_client.chdir(remote_root + "/" + region_name)
|
|
channel_names = os.listdir(f"{local_root}/{region_name}")
|
|
for channel_name in channel_names:
|
|
# sftp创建channel文件夹
|
|
try:
|
|
sftp_client.chdir(f"{remote_root}/{region_name}/{channel_name}")
|
|
except BaseException:
|
|
Logger.info(f"create channel dir: {remote_root}/{region_name}/{channel_name}")
|
|
sftp_client.mkdir(f"{remote_root}/{region_name}/{channel_name}")
|
|
sftp_client.chdir(f"{remote_root}/{region_name}/{channel_name}")
|
|
# 获取本地文件夹
|
|
srt_names = os.listdir(f"{local_root}/{region_name}/{channel_name}")
|
|
for srt_name in srt_names:
|
|
# 获取远程文件路径以及本地文件路径
|
|
srt_path = f"{local_root}/{region_name}/{channel_name}/{srt_name}"
|
|
remote_path = f"{remote_root}/{region_name}/{channel_name}/{srt_name}"
|
|
# 如果远程文件存在,则进行删除
|
|
try:
|
|
sftp_client.stat(remote_path)
|
|
# 如果文件存在,删除它
|
|
sftp_client.remove(remote_path)
|
|
Logger.info("Remote file '{}' deleted.".format(remote_path))
|
|
except FileNotFoundError:
|
|
Logger.info("Remote file '{}' not found.".format(remote_path))
|
|
# 上传本地文件
|
|
try:
|
|
# 判断本地文件是否存在,存在则上传
|
|
if os.path.exists(srt_path):
|
|
Logger.info("本地文件 '{}' 存在,开始上传.".format(srt_path))
|
|
sftp_client.put(srt_path, remote_path, confirm=False)
|
|
os.remove(srt_path)
|
|
else:
|
|
Logger.info("本地文件 '{}' 不存在,无法上传.".format(srt_path))
|
|
except Exception as e:
|
|
Logger.info("上传失败 '{}' 文件名长度{}".format(
|
|
remote_path, len(remote_path)))
|
|
Logger.error(e)
|
|
sftp_client.close()
|
|
sftp_client = ssh_client.open_sftp()
|