#!/usr/bin/env python3 import os import subprocess def sizeinbytes(size, unit): mag = {'KiB' : 1, 'MiB': 2, 'GiB' : 3} return float(size) * (1000 ** mag[unit]) # Run czkawka_cli on the current directory cwd = os.getcwd() print("Running czkawa for directory ", cwd, "...", sep="") czkawka = ["czkawka_cli", "image", "-d", cwd] czkawkadata = subprocess.run(czkawka, stdout=subprocess.PIPE) czkawkadata = czkawkadata.stdout.decode('utf-8').splitlines() # Convert to a normal string and split into lines if not czkawkadata: print("All images in", cwd, "are unique. Exiting...") exit() # Get number of images total and remove first line since it would cause issues numimages = int(czkawkadata[0].split()[1]) print ("Done!", numimages, "duplicate images found...") czkawkadata.pop(0) # Split czkawkadata by the delimeter used by czkawka_cli czkawkadata = [i.split(' - ') for i in czkawkadata] # Make keep store the images we want to keep largest = 0 i = 0 dups = 0 keep = [None] * numimages for image in czkawkadata: if not image[0]: largest = 0 i += 1 continue dups += 1 size = image[2].split() size = sizeinbytes(size[0], size[1]) # Convert to bytes so we can easily compate kb vs mb vs gb if size > largest: largest = size keep[i] = image # Remove all empty entries from czkawkadata czkawkadata[:] = [x for x in czkawkadata if x[0]] # Remove any images we're keeping from czkawkadata to be left with only the duplicates for image in keep: czkawkadata.remove(image) # User actions confirmation = None message = "Are you sure you want to delete all " + str(dups - len(keep)) + " duplicate images? (Yes/No/Show) " while not confirmation: confirmation = input(message) if (confirmation == "yes"): for image in czkawkadata: os.remove(image[0]) print("Removed image", image[0]) elif (confirmation == "no"): exit() elif (confirmation == "show"): for image in czkawkadata: print(image) confirmation = None # Prompt again else: confirmation = None