Advertisement
Guest User

Untitled

a guest
Feb 23rd, 2017
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.39 KB | None | 0 0
  1. import subprocess
  2. import tempfile
  3. import select
  4. import os
  5. import sys
  6. import copy
  7. import datetime
  8.  
  9. src = sys.argv[1]
  10. dst = sys.argv[1]+"-backup"
  11.  
  12. def loadmd5sqlite(db, container, prefix):
  13. with tempfile.NamedTemporaryFile() as f:
  14. env=os.environ.copy()
  15. if prefix:
  16. env['PREFIX'] = prefix
  17. lst = subprocess.Popen(
  18. ['./list.py', container],
  19. stdout=subprocess.PIPE,
  20. env=env
  21. )
  22. tsv = subprocess.Popen(
  23. ['sed', 's/ %s/\t%s\t/' % (prefix.replace('/', r'\/'), container)],
  24. stdin=lst.stdout,
  25. stdout=subprocess.PIPE
  26. )
  27. f.write('''CREATE TABLE IF NOT EXISTS `cmp` (md5 text, type text, filename text);
  28. .separator "\t"
  29. .import /dev/stdin cmp
  30. ''')
  31. f.flush()
  32. load = subprocess.Popen(
  33. ['sqlite3', '-cmd', '.read '+f.name, db],
  34. stdin=tsv.stdout
  35. )
  36. load.wait()
  37.  
  38. if True:
  39. try: os.unlink('compare.sqlite3')
  40. except: pass
  41. loadmd5sqlite('compare.sqlite3', src, '')
  42. loadmd5sqlite('compare.sqlite3', dst, 'current/')
  43.  
  44. # bestanden die overschreven zouden worden/verwijdert zijn verplaatsen naar YYYY-MM-DD)
  45. with tempfile.NamedTemporaryFile() as f:
  46. f.write('''.separator "\t"
  47. SELECT `filename` FROM `cmp` GROUP BY `filename` HAVING COUNT(*) = 2 AND MIN(`md5`) != MAX(`md5`);
  48. SELECT `filename` FROM `cmp` GROUP BY `md5`, `filename` HAVING COUNT(*) = 1 AND `type` = "%(dst)s";
  49. ''' % {'dst':dst})
  50. f.flush()
  51. sqlite3 = subprocess.Popen(["sqlite3", "compare.sqlite3", ".read "+f.name], stdout=subprocess.PIPE)
  52. env=os.environ.copy()
  53. env['SRC'] = dst+"/current/"
  54. env['DST'] = "%s/%s/" % (dst, datetime.date.today().isoformat())
  55. env['ACTION'] = "move"
  56. swiftcopy = subprocess.Popen(["xargs", "./swiftcopy.py"], env=env, stdin=sqlite3.stdout)
  57. swiftcopy.wait()
  58.  
  59. # bestanden die nieuw zijn kopieren naar current
  60. with tempfile.NamedTemporaryFile() as f:
  61. f.write('''.separator "\t"
  62. SELECT `filename` FROM `cmp` GROUP BY `md5`, `filename` HAVING COUNT(*) = 1 AND `type` = %(src)s;
  63. ''' % {'src':src})
  64. f.flush()
  65. sqlite3 = subprocess.Popen(["sqlite3", "compare.sqlite3", ".read "+f.name], stdout=subprocess.PIPE)
  66. env=os.environ.copy()
  67. env['SRC'] = src
  68. env['DST'] = dst + "/current/"
  69. env['ACTION'] = "copy"
  70. swiftcopy = subprocess.Popen(["xargs", "./swiftcopy.py"], env=env, stdin=sqlite3.stdout)
  71. swiftcopy.wait()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement