123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147 |
- import sqlite3
- import os
- import re
- import string
- import stat
- import popen2
- import glob
- import sys
- import os
- import pprint
- import base64
- import getpass
- import os
- import socket
- import sys
- import traceback
- import paramiko
- import socket
- from subprocess import Popen
- def distance(a,b):
- c = {}
- n = len(a); m = len(b)
- for i in range(0,n+1):
- c[i,0] = i
- for j in range(0,m+1):
- c[0,j] = j
- for i in range(1,n+1):
- for j in range(1,m+1):
- x = c[i-1,j]+1
- y = c[i,j-1]+1
- if a[i-1] == b[j-1]:
- z = c[i-1,j-1]
- else:
- z = c[i-1,j-1]+1
- c[i,j] = min(x,y,z)
- return c[n,m]
- paramiko.util.log_to_file('rom_sftp.log')
- if socket.gethostname() == 'slap':
- path = "/home/david/Devel/arch/avr/code/snesram/roms/"
- username = "david"
- hostname = "slap"
- elif socket.gethostname() == 'box':
- path = "/Users/david/Devel/arch/avr/code/snesram/roms/"
- username = "david"
- hostname = "burst"
- else:
- sys.exit()
- def shellquote(s):
- return "'" + s.replace("'", "'\\''") + "'"
- def main():
- port = 22
- password = getpass.getpass('Password for %s@%s: ' % (username, hostname))
- hostkeytype = None
- hostkey = None
- host_keys = paramiko.util.load_host_keys(os.path.expanduser('~/.ssh/known_hosts'))
- if host_keys.has_key(hostname):
- hostkeytype = host_keys[hostname].keys()[0]
- hostkey = host_keys[hostname][hostkeytype]
- print 'Using host key of type %s' % hostkeytype
- try:
- print "Connect %s:%s" % (hostname, port)
- t = paramiko.Transport((hostname, port))
- t.connect(username=username, password=password, hostkey=hostkey)
- sftp = paramiko.SFTPClient.from_transport(t)
- # dirlist on remote host
- dirlist = sftp.listdir('.')
- print "Dirlist:", dirlist
- conn = sqlite3.connect('roms_cleanup.sqlite3')
- c = conn.cursor()
- for i in [(1,),(2,),(4,),(8,),(16,)]:
- dirname = os.path.join(path,"%02i" % i)
- if not os.path.isdir(dirname):
- os.mkdir(dirname)
- print "#" * 60
- print "%i MBit" % i
- print "#" * 60
- c.execute('''SELECT
- rom_name,
- rom_mb,
- file_name
- FROM
- roms
- WHERE
- rom_mb = ?
- AND
- rom_hirom = 0
- AND
- rom_sram = 0
- AND
- rom_type = 0
- AND
- rom_region like "Europe%"
- ORDER BY file_name
- ''',i)
-
-
- last_name = str()
- for row in c:
- name,size,filename = row
- d = distance(os.path.basename(filename),os.path.basename(last_name))
- if d < 7:
- print "Skip ",filename
- continue
- filename_dst = os.path.join(dirname,os.path.basename(filename))
- print "Remote: %s -> %s" % ( filename,filename_dst)
- last_name = filename
- try:
- sftp.get(filename,filename_dst)
- except Exception, e:
- print '*** Caught exception: %s: %s' % (e.__class__, e)
- traceback.print_exc()
- print "Done"
- except Exception, e:
- print '*** Caught exception: %s: %s' % (e.__class__, e)
- traceback.print_exc()
- try:
- t.close()
- except:
- pass
- sys.exit(1)
- t.close()
- if __name__ == '__main__':
- main()
|