Last active
February 9, 2018 21:39
-
-
Save bgusach/d1e6d891e727d677d54dba92403352da to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python | |
# coding: utf-8 | |
""" | |
Tool to detect and delete orphan raw files | |
""" | |
from __future__ import unicode_literals, print_function | |
import argparse | |
import sys | |
import os | |
try: | |
input = raw_input | |
except NameError: | |
pass | |
def _log(msg): | |
print('remove-orphan-raws: %s' % msg, file=sys.stderr) | |
def remove_raw_orphans(dir, pic_exts, raw_exts, batch): | |
to_delete = [] | |
pic_paths_without_ext = set() | |
raw_full_paths = [] | |
for file in os.listdir(dir): | |
name, ext = os.path.splitext(file) | |
ext = ext[1:].lower() | |
if ext in pic_exts: | |
pic_paths_without_ext.add(name) | |
continue | |
if ext in raw_exts: | |
raw_full_paths.append(file) | |
continue | |
for raw in raw_full_paths: | |
name = os.path.splitext(raw)[0] | |
if name not in pic_paths_without_ext: | |
to_delete.append(raw) | |
if not to_delete: | |
_log('No orphan raws identified') | |
return | |
if batch: | |
delete = True | |
else: | |
prompt = 'Orphans identified:\n%s\n\nDo you want to delete them? (y/n) ' % '\n'.join(to_delete) | |
delete = input(prompt).lower() == 'y' | |
if not delete: | |
return | |
for name in to_delete: | |
os.unlink(os.path.join(dir, name)) | |
_log('Done') | |
def _split_extensions(ext): | |
return [s.strip().lower() for s in ext.split(',')] | |
if __name__ == '__main__': | |
parser = argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter) | |
parser.add_argument('-d', '--dir', help='Target directory to search for orphans', default='.') | |
parser.add_argument('-p', '--pic-ext', | |
help='Extensions of picture files (comma separated, case insensitive)', default='jpeg,jpg') | |
parser.add_argument('-r', '--raw-ext', | |
help='Extension of raw files to be removed (comma separated, case insenstive)', | |
default='nef,cn2') | |
parser.add_argument('-b', '--batch', | |
help='Run in batch. No confirmation before deleting files', | |
action='store_true') | |
args = parser.parse_args() | |
remove_raw_orphans( | |
dir=args.dir, | |
pic_exts=_split_extensions(args.pic_ext), | |
raw_exts=_split_extensions(args.raw_ext), | |
batch=args.batch, | |
) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment