From f379ffcc7e85dae8b8c6875fc54dc6d0c4707a9e Mon Sep 17 00:00:00 2001 From: GRayHook Date: Sat, 9 Jul 2022 18:54:34 +0700 Subject: [PATCH] init --- ddp.py | 78 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100755 ddp.py diff --git a/ddp.py b/ddp.py new file mode 100755 index 0000000..d1b6b7d --- /dev/null +++ b/ddp.py @@ -0,0 +1,78 @@ +#!/usr/bin/python3 + +import subprocess +import itertools +import os +import sys + + +GET_ALL_PICS_LIST_STRING="find . -iname '*.jpg' -o -iname '*.png' -o -iname '*.jpeg'" +COMPARE_PICS_CMD="compare -metric AE -fuzz 0.1% \"{}\" \"{}\" /dev/null" + +def main(): + out = subprocess.Popen(['sh', '-c', GET_ALL_PICS_LIST_STRING], + stdout=subprocess.PIPE, stderr=subprocess.STDOUT) + all_pics_string = out.communicate()[0].decode('utf-8') + all_pics = all_pics_string.split('\n') + print(f"Gathered {len(all_pics)} photos.") + + duplicate_map = {} + scanned_files = [] + for pic in all_pics: + if not pic: + continue + name = os.path.basename('.'.join(pic.split('.')[:-1])) + if not name: + print("WTF? name is empty") + continue + if pic in scanned_files: + continue + for other_pic in all_pics: + if pic == other_pic: + continue + if other_pic in scanned_files: + continue + if os.path.basename(other_pic).startswith(name): + if pic not in duplicate_map: + duplicate_map.update({pic: []}) + scanned_files.append(pic) + duplicate_map[pic].append(other_pic) + scanned_files.append(other_pic) + + origs = len(duplicate_map.keys()) + clones = sum([len(values) for values in duplicate_map.values()]) + candidates = origs + clones + print(f"Found {origs} + {clones} = {candidates} delete candidate.") + sys.exit(0) + + for pic, dups in duplicate_map.items(): + delete_list = [] + pics = [pic] + dups + for pic_a, pic_b in itertools.combinations(pics, 2): + if pic_b in delete_list or pic_a in delete_list: + continue + if not os.path.exists(pic_a): + print(f"pic_a doesnt exist: '{pic_a}'") + continue + if not os.path.exists(pic_b): + print(f"pic_b doesnt exist: '{pic_b}'") + continue + out = subprocess.Popen(['sh', '-c', COMPARE_PICS_CMD.format(pic_a, pic_b)], + stdout=subprocess.PIPE, stderr=subprocess.STDOUT) + value_string, stderr = out.communicate() + if out.returncode >= 2: + print(f"HERE!!! stdout: {value_string}\nstderr: {stderr}\nreturn code: {out.returncode}") + continue + #diff = float(value_string.decode('utf-8')) + #if diff == 0.: + if out.returncode == 0: + delete_list.append(pic_b) + + print(f"In list {pics} i will delete") + print(f"this pics: {delete_list}") + for delete_elem in delete_list: + os.remove(delete_elem) + + +if __name__ == '__main__': + main()