1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
| #!/usr/bin/python
import pexpect
import paramiko
import os
import sys
import time
import multiprocessing
import datetime
import crash_on_ipy
from stat import S_ISDIR
ip_list = []
#room_id = sys.argv[1]
class run_cmd():
def __init__(self,hostname=None,password=None,username=None,port=None,echo_cmd=None):
#threading.Thread.__init__(self)
self.hostname=hostname
self.password=password
self.username=username
self.port=port
self.echo_cmd=echo_cmd
#self.thread_stop=False
def run(self):
paramiko.util.log_to_file('paramiko.log')
s=paramiko.SSHClient()
s.set_missing_host_key_policy(paramiko.AutoAddPolicy())
s.connect(hostname = self.hostname,username=self.username, password=self.password)
stdin,stdout,stderr=s.exec_command(self.echo_cmd)
return stdout.readlines()
s.close()
def stop(self):
self.thread_stop=True
class get_thread():
def __init__(self,hostname,password,username,port=None):
#def __init__(self,hostname,username='root',key_file=None,password=None):
#def __init__(self,hostname=None,password=None,username=None,port=None,local_dir=None,remote_dir=None):
self.hostname = hostname
self.username = username
self.password = password
self.scp = paramiko.SSHClient()
self.scp.set_missing_host_key_policy(paramiko.AutoAddPolicy())
self.scp = paramiko.Transport((hostname, 22))
self.scp.connect(username=username, password=password)
self.sftp = paramiko.SFTPClient.from_transport(self.scp)
def _walk_remote(self, dirpath):
dirnames = []
filenames = []
for fd in self.sftp.listdir_attr(dirpath):
if S_ISDIR(fd.st_mode):
dirnames.append(fd.filename)
else:
filenames.append(fd.filename)
yield dirpath, dirnames, filenames
for dirname in dirnames:
new_dirpath = os.path.join(dirpath, dirname)
# yield from self._walk_remote(new_dirpath)
for walk in self._walk_remote(new_dirpath):
yield walk
def getall(self,local,remote):
st_mode = self.sftp.stat(remote).st_mode
if not S_ISDIR(st_mode):
filename = os.path.basename(remote)
self.sftp.get(remote, os.path.join(local, filename))
else:
parent, child = os.path.split(remote)
for dirpath, dirnames, filenames in self._walk_remote(remote):
dirpath = dirpath.replace(parent, '.')
parentc = os.path.join(local,dirpath)
if not os.path.exists(parentc):
os.makedirs(parentc)
for dirname in dirnames:
try:
os.makedirs(os.path.join(local, dirpath, dirname))
except:
pass
for filename in filenames:
localpath = os.path.join(local, dirpath, filename)
remotepath = os.path.join(parent, dirpath, filename)
self.sftp.get(remotepath, localpath)
self.scp.close()
if __name__=='__main__':
port = 22
now = datetime.datetime.now()
strdatetime = now.strftime("%Y-%m-%d")
year=strdatetime.split('-')[0]
mon=strdatetime.split('-')[1]
day=strdatetime.split('-')[2]
Datenow1= year + "/" + mon + "/" + day + "/"
Datenow= year + "/" + mon
print "-"*50
f = file('/home/python/filelist','r')
c = f.readlines()
for x in c:
hostname = x.split('::')[0]
password = x.split('::')[1]
username = x.split('::')[2]
local= x.split('::')[3].strip('\n')
remotes = x.split('::')[4].strip('\n')
localz=local + "/" + mon + "/" + day
if remotes.endswith('/'):
remote1 = remotes + Datenow
remote2 = remotes + Datenow1
else:
remote3 = remotes
if not os.path.exists(localz):
remote = remote1
getthread=get_thread(hostname,password,username)
getthread.getall(local,remote)
else:
remote = remote2
echo_cmd='/bin/find %s -maxdepth 1 -type d -mmin -5' % (remote)
cmd_thread=run_cmd(hostname,password,username,port,echo_cmd)
result=cmd_thread.run()
del result[0]
for item in result:
print str(item)
items = item.strip('\n')
getthread=get_thread(hostname,password,username)
getthread.getall(localz,items)
f.close()
|