Now we check target path subfolders as well if file already exists, for example in paths like I:\Photos\2026\04\20\_Not selected

This commit is contained in:
2026-04-28 18:52:57 +03:00
parent 2443f4b954
commit 0ee6a29dd1
+27 -6
View File
@@ -31,11 +31,31 @@ def get_exif_date(file_path):
return "CRITICAL ERROR: exiftool command not found. Please ensure exiftool is installed and in your system PATH." return "CRITICAL ERROR: exiftool command not found. Please ensure exiftool is installed and in your system PATH."
def find_existing_file(base_path, filename):
"""
Check if a file already exists at base_path or any of its subdirectories.
Returns the full path to the existing file, or None if not found.
"""
# First check the base_path directory itself
candidate = os.path.join(base_path, filename)
if os.path.exists(candidate):
return candidate
# Then search all subdirectories recursively
for foldername, subfolders, files in os.walk(base_path):
for f in files:
if f == filename:
return os.path.join(foldername, f)
return None
def scan_photos(root_dir, base_target_path): def scan_photos(root_dir, base_target_path):
""" """
Recursively scans the given directory (root_dir), extracts EXIF date, Recursively scans the given directory (root_dir), extracts EXIF date,
prints file details with proposed destination paths, then asks for confirmation prints file details with proposed destination paths, then asks for confirmation
before copying files. before copying files. Before copying, it checks if the file already exists
in the target date folder or any of its subdirectories.
""" """
accepted_extensions = ('.jpg', '.jpeg', '.dng', '.raw', '.cr2', '.cr3', '.raf') accepted_extensions = ('.jpg', '.jpeg', '.dng', '.raw', '.cr2', '.cr3', '.raf')
@@ -104,19 +124,20 @@ def scan_photos(root_dir, base_target_path):
created_dirs_count = 0 created_dirs_count = 0
for file_path, date_time_str, dest_dir in file_info_list: for file_path, date_time_str, dest_dir in file_info_list:
dest_file = os.path.join(dest_dir, os.path.basename(file_path)) filename = os.path.basename(file_path)
# Create destination directory if it doesn't exist # Create destination directory if it doesn't exist
if not os.path.exists(dest_dir): if not os.path.exists(dest_dir):
os.makedirs(dest_dir) os.makedirs(dest_dir)
created_dirs_count += 1 created_dirs_count += 1
# Check if file already exists in destination # Check if the file already exists in dest_dir or any of its subdirectories
if os.path.exists(dest_file): existing = find_existing_file(dest_dir, filename)
print(f"File already exists: {dest_file} (skipped)") if existing:
print(f"File {filename} already exists at: {existing} (skipped)")
skipped_exists_count += 1 skipped_exists_count += 1
else: else:
filename = os.path.basename(file_path) dest_file = os.path.join(dest_dir, filename)
print("\n--- Starting copy of: " + filename + " ---") print("\n--- Starting copy of: " + filename + " ---")
print("Source: " + file_path) print("Source: " + file_path)
print(f"Destination: {dest_file}") print(f"Destination: {dest_file}")