#!/usr/bin/env python """ Functions to copy bits around ... """ from os import system,path,rename from tqdm import tqdm from _file_stuff import create_folder, cmp_files, path_exists from _hashing import xx_hash def copy_with_progress(s,d): """ Copy a file with the progress bar """ # size = path.getsize(s) with open(s, 'rb') as fs: with open(d, 'wb') as fd: while True: chunk = fs.read(4096) if not chunk: break fd.write(chunk) def copy_from_source(source_path,dest_path,file_name): """ Copy file from source to destination """ file_exists = path_exists(path.join(dest_path,file_name)) if file_exists is True: print(f'\nFound {file_name} at destination, checking if they match.') check_match = cmp_files( path.join(source_path,file_name), path.join(dest_path, file_name)) if check_match is False: print(f'\nFound duplicate for {source_path}/{file_name}, \ renaming destination with hash appended.') base, extension = path.splitext(file_name) f_xxhash = xx_hash(path.join(dest_path, file_name)) file_name_hash = base + '_' + f_xxhash + extension rename(path.join(dest_path, file_name), path.join(dest_path, file_name_hash)) else: print(f'\n{file_name} hashes match') # remove(path.join(source_path,file_name)) # f.pop(file_name) return # create_folder(dest_path) # shutil.copy(os.path.join(source_path,file_name), dest_path) copy_with_progress(path.join(source_path, file_name), path.join(dest_path, file_name)) def copy_files(f,config): """ Copy Files. """ system('clear') for file in tqdm(f, desc="Copying Files:"): create_folder(f[file]['folders']['destination']) copy_from_source(f[file]['folders']['source_path'], f[file]['folders']['destination'], f[file]['name']) if config['store_originals'] is True: if f[file]['type'] == 'image': create_folder(f[file]['folders']['destination_original']) copy_from_source(f[file]['folders']['destination'], f[file]['folders']['destination_original'], f[file]['name'])