# copier.py # Funções para copiar ficheiros para o destino organizado from modules.organizer import ( obter_data_ficheiro, criar_pasta_destino, categorizar_por_tipo, ) from pathlib import Path import shutil from tqdm import tqdm from modules.logger import logger def copiar_ficheiros_para_destino( lista_ficheiros: list[str], base_destino: str, categorizar_data: bool = False, usar_criacao: bool = False, formato_data: str = "%d-%m-%Y", ) -> None: """ Copiar cada ficheiro na lista para o directório base, seguindo as regras de categorização argumentos: lista_ficheiros (list[str]) -> lista com o caminho dos ficheiros a serem copiados base_destino (str) -> directorio base no qual serão criados os novos directórios com base nas regras de categorização categorizar_data (bool) -> flag para activar categorização por data (defeito: False) usar_criacao (bool) -> usar data de criação (defeito: False usar data de modificacao) formato_data (str) -> formato de data para nome dos subdirectórios (defeito: '%d-%m-%Y') retorna: None """ destino_path = Path(base_destino) with tqdm( total=len(lista_ficheiros), desc="A copiar ficheiros ", unit="ficheiro " ) as barra_progresso: for ficheiro in lista_ficheiros: ficheiro_path = Path(ficheiro) try: if not ficheiro_path.exists(): logger.warning("Ficheiro '%s' não encontrado. A ignorar.", ficheiro) barra_progresso.update(1) continue if categorizar_data: data_ficheiro = obter_data_ficheiro( ficheiro, usar_criacao=usar_criacao ) pasta_destino = criar_pasta_destino( str(destino_path), categorizar_por_tipo(ficheiro), data_ficheiro, formato_data, ) else: pasta_destino = criar_pasta_destino( str(destino_path), categorizar_por_tipo(ficheiro), ) destino_ficheiro = pasta_destino / ficheiro_path.name shutil.copy2(ficheiro_path, destino_ficheiro) logger.info( "Ficheiro '%s' copiado com sucesso para '%s'", ficheiro, destino_ficheiro, ) except Exception as e: logger.error("Erro a copiar '%s': %s", Path(ficheiro).name, e) finally: barra_progresso.update(1)