73 lines
2.7 KiB
Python
73 lines
2.7 KiB
Python
# 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)
|