自动sftp上传文件

 shell脚本: 1 #!/bin/sh

 2 
 3 tmp_dir="D:/01_code"
 4 
 5 if [ $# -lt 1 ]
 6 then
 7 work_dir="D:/01_code/iflight"
 8 else
 9 work_dir=$1
10 fi
11 
12 cd ${work_dir}
13 git add .
14 git status | grep deleted | awk '{print $2}' > ${tmp_dir}/deleted.tmp
15 git status | grep "new file" | awk '{print $3}' > ${tmp_dir}/new.tmp
16 git status | grep modified | awk '{print $2}' > ${tmp_dir}/modified.tmp
17 # 后面新增了rename的处理
18 #echo "all modification file list:" 19 #echo "********************************************************************************************************************" 20 #cat ${tmp_dir}/modified.tmp 21 #echo "********************************************************************************************************************" 22 23 #echo "all added file list:" 24 #echo "********************************************************************************************************************" 25 #cat ${tmp_dir}/new.tmp 26 #echo "********************************************************************************************************************" 27 28 #echo "all deleted file list:" 29 #echo "********************************************************************************************************************" 30 #cat ${tmp_dir}/deleted.tmp 31 #echo "********************************************************************************************************************" 32 33 34 C:/Python27/python.exe D:/03_work/tools/syscode/syscode.py ${work_dir} ${tmp_dir}

 

python需要安装paramiko。

source insight中配置如下,需要将D:\Program Files\Git\bin加入到PATH中(因要直接使用bash) 

 

对应的python脚本:

syscode.py

 1 #coding=UTF-8

#后续新增了del的处理
2 import os 3 import paramiko 4 from fnmatch import fnmatch 5 from datetime import date 6 from subprocess import * 7 import getpass 8 import sys 9 import telnetlib 10 import re 11 import io 12 import logging 13 global CWD,LOGFILE,CONFIGFILE 14 CWD='D:/03_work/tools/syscode' 15 CONFIGFILE=CWD+'\\config.cfg' 16 def initial(): 17 global HOSTIP, USERNAME, PASSWORD, PROMPT, LOCALCODEDIR, REMOTECODEDIR 18 result=0 19 f_conf=open(CONFIGFILE,'r') 20 for line in f_conf: 21 m = re.search('(.*)=(.*)',line) 22 if m: 23 var=m.group(1) 24 content=m.group(2) 25 if var == 'HOSTIP': 26 HOSTIP=content 27 result=result+1 28 if var == 'USERNAME': 29 USERNAME=content 30 result=result+1 31 if var == 'PASSWORD': 32 PASSWORD=content 33 result=result+1 34 if var == 'LOCALCODEDIR': 35 LOCALCODEDIR=content 36 result=result+1 37 if var == 'REMOTECODEDIR': 38 REMOTECODEDIR=content 39 result=result+1 40 if var == 'PROMPT': 41 PROMPT=content 42 result=result+1 43 return result 44 45 def mysftp(sftp,tmpFileName): 46 #print "begin sftp" 47 file=open(tmpFileName,'r') 48 for line in file: 49 # upload file 50 #line=line.replace('\\','/') 51 line=line.replace('\n','') 52 line=LOCALCODEDIR+"/"+line; 53 54 dest=line 55 tmp = dest.replace(LOCALCODEDIR,REMOTECODEDIR) 56 57 print line+'-->'+tmp 58 59 try: 60 sftp.put(line, tmp); 61 except Exception,e: 62 print("sftp upload exception:", e) 63 file.close() 64 65 def main(): 66 #print "begin main" 67 print 'Begin read config.cfg...' 68 os.chdir(CWD) 69 if initial() != 6: 70 print "read config.cfg failed,please check it!" 71 return -1 72 print 'Read config.cfg sucessed!' 73 74 LOCALCODEDIR=sys.argv[1] 75 TMPDIR=sys.argv[2] 76 77 # SFTP to server 78 #ssh=paramiko.SSHClient() 79 #ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 80 #ssh.connect(HOSTIP,22,USERNAME,PASSWORD) 81 sf=paramiko.Transport((HOSTIP,22)) 82 sf.connect(username=USERNAME,password=PASSWORD) 83 sftp=paramiko.SFTPClient.from_transport(sf) 84 85 print "begin get modified file list..." 86 mysftp(sftp, TMPDIR+"/modified.tmp") 87 88 print "begin get added file list..." 89 mysftp(sftp, TMPDIR+"/new.tmp") 90 91 print "begin get deleted file list..." 92 93 # quit SFTP and TELNET 94 sf.close() 95 96 if __name__ == '__main__': 97 main()

 



 

posted @ 2017-11-21 15:53  timwind  阅读(1168)  评论(0)    收藏  举报