Guest User

Untitled

a guest
Feb 17th, 2018
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.28 KB | None | 0 0
  1. #!/usr/bin/env python
  2. # coding: utf-8
  3.  
  4. """
  5. Tool to detect and delete orphan raw files
  6.  
  7. """
  8.  
  9. from __future__ import unicode_literals, print_function
  10.  
  11. import argparse
  12. import sys
  13. import os
  14.  
  15. try:
  16. input = raw_input
  17. except NameError:
  18. pass
  19.  
  20.  
  21. def _log(msg):
  22. print('remove-orphan-raws: %s' % msg, file=sys.stderr)
  23.  
  24.  
  25. def remove_raw_orphans(dir, pic_exts, raw_exts, batch):
  26. to_delete = []
  27.  
  28. pic_paths_without_ext = set()
  29. raw_full_paths = []
  30.  
  31. for file in os.listdir(dir):
  32. name, ext = os.path.splitext(file)
  33. ext = ext[1:].lower()
  34.  
  35. if ext in pic_exts:
  36. pic_paths_without_ext.add(name)
  37. continue
  38.  
  39. if ext in raw_exts:
  40. raw_full_paths.append(file)
  41. continue
  42.  
  43. for raw in raw_full_paths:
  44. name = os.path.splitext(raw)[0]
  45.  
  46. if name not in pic_paths_without_ext:
  47. to_delete.append(raw)
  48.  
  49. if not to_delete:
  50. _log('No orphan raws identified')
  51. return
  52.  
  53. if batch:
  54. delete = True
  55. else:
  56. prompt = 'Orphans identified:\n%s\n\nDo you want to delete them? (y/n) ' % '\n'.join(to_delete)
  57. delete = input(prompt).lower() == 'y'
  58.  
  59. if not delete:
  60. return
  61.  
  62. for name in to_delete:
  63. os.unlink(os.path.join(dir, name))
  64.  
  65. _log('Done')
  66.  
  67.  
  68. def _split_extensions(ext):
  69. return [s.strip().lower() for s in ext.split(',')]
  70.  
  71.  
  72. if __name__ == '__main__':
  73. parser = argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter)
  74.  
  75. parser.add_argument('-d', '--dir', help='Target directory to search for orphans', default='.')
  76. parser.add_argument('-p', '--pic-ext',
  77. help='Extensions of picture files (comma separated, case insensitive)', default='jpeg,jpg')
  78. parser.add_argument('-r', '--raw-ext',
  79. help='Extension of raw files to be removed (comma separated, case insenstive)',
  80. default='nef,cn2')
  81. parser.add_argument('-b', '--batch',
  82. help='Run in batch. No confirmation before deleting files',
  83. action='store_true')
  84. args = parser.parse_args()
  85.  
  86. remove_raw_orphans(
  87. dir=args.dir,
  88. pic_exts=_split_extensions(args.pic_ext),
  89. raw_exts=_split_extensions(args.raw_ext),
  90. batch=args.batch,
  91. )
Add Comment
Please, Sign In to add comment