Je me suis fait des doublons de fichiers dans mes photos, heureusement Python c’est simple et convivial :
import os import sys import re import PIL from PIL import Image walk_dir = "./Nextcloud/Photos/" print('walk_dir = ' + walk_dir) print('walk_dir (absolute) = ' + os.path.abspath(walk_dir)) for root, subdirs, files in os.walk(walk_dir): list_file_path = os.path.join(root, 'my-directory-check.txt') print('list_file_path = ' + list_file_path) with open(list_file_path, 'wb') as list_file: #for subdir in subdirs: # print('\t- subdirectory ' + subdir) for filename in files: file_path = os.path.join(root, filename) # print('\t- file %s (full path: %s)' % (filename, file_path)) base = os.path.splitext(filename)[0] if (base.endswith('_1')): #print('\t- Doublon probable %s %s (full path: %s)' % (filename, base, file_path)) double = re.sub('_1$', '', base) double = double + '.jpg' double2 = re.sub('_1$', '', base) double2 = double2 + '.JPG' file_path_double = os.path.join(root, double) file_path_double2 = os.path.join(root, double2) if os.path.isfile(file_path_double): #print('\t- Doublon OK %s & %s' % (file_path, file_path_double)) img1 = PIL.Image.open(file_path) img2 = PIL.Image.open(file_path_double) wid1, hgt1 = img1.size wid2, hgt2 = img2.size if (wid1 == wid2) and (hgt1 == hgt2): #print('Meme resolution') size1 = os.path.getsize(file_path) size2 = os.path.getsize(file_path_double) if (size1 > size2): print("%s > %s" % (file_path, file_path_double)); os.remove(file_path_double); else: print("%s < %s" % (file_path, file_path_double)); os.remove(file_path); elif os.path.isfile(file_path_double2): img1 = PIL.Image.open(file_path) img2 = PIL.Image.open(file_path_double2) wid1, hgt1 = img1.size wid2, hgt2 = img2.size if (wid1 == wid2) and (hgt1 == hgt2): #print('Meme resolution') size1 = os.path.getsize(file_path) size2 = os.path.getsize(file_path_double2) if (size1 > size2): print("%s > %s" % (file_path, file_path_double2)); os.remove(file_path_double2); else: print("%s < %s" % (file_path, file_path_double2)); os.remove(file_path);
Ensuite pour faire un clean des fichiers txt :
find ./Nextcloud/Photos/ -name my-directory-check.txt -exec /bin/rm -f {} \;
Vive les boulettes ..