123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130 |
- import sqlite3
- import os
- import sys
- import getpass
- import socket
- import traceback
- import paramiko
- 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()
|