Pré-requisitos

  • Conhecimentos em programação;
  • Familiaridade com a linguagem de programação Python;
  • Pasta de scripts na raiz do Obsidian
  • Arquivos com notas diárias na raiz do Obsidian;
  • Nome dos arquivos de notas diárias no padrão 2024-12-31.

Planejando o algoritmo

  1. Usar uma expressão glob para localizar todos os arquivos *.md na pasta raiz: 20*.md;
  2. Se o nome do arquivo NÃO faz referência aos últimos sete dias, movê-lo para a pasta Antigos;

Algoritmo

  1. Importar bibliotecas que vamos precisar
    from datetime import date, datetime, timedelta
    from glob import glob
    from pathlib import Path
    from shutil import move
    import os
    
  2. Obter o caminho das pastas que iremos utilizar
    # Nesse caso, meu aquivo está na pasta `.scripts`
    pasta_script = os.path.dirname(os.path.abspath(__file__))
    # Logo, a pasta raiz do Obsidian é a pasta acima (`parent`)
    pasta_raiz = Path(pasta_script).parent
    # Altere aqui, se você quer usar um nome diferente
    pasta_arquivo = f"{pasta_raiz}/Antigos"
    # Não esqueça de alterar o `20` se você estiver no 22º século
    notas_diárias = glob(f"{pasta_raiz}/20*.md")
    
    • Se você quiser mudar o nome da pasta em que as notas diárias serão arquivadas, altere o final da variável pasta_arquivo, substituindo apenas a parte que está após a primeira barra (/), mantendo a aspa final (").
  3. Calcular as datas: obter a data de hoje e a data de sete dias atrás
     hoje = date.today()
     há_sete_dias = hoje - timedelta(days=7)
    
  4. Percorrer as notas diárias da pasta raiz
     for diário in notas_diárias:
    
  5. Pegar apenas o nome do arquivo — sem o caminho e sem a extensão — e calcular a data a que esse arquivo se refere
    # Nome do arquivo, sem o caminho e sem a extensão
    nome_arquivo = Path(diário).stem
    # Data a qual o arquivo se refere num formato que o Python entende
    data_diário = datetime.strptime(nome_arquivo, "%Y-%m-%d").date()
    
  6. Mover o arquivo para a pasta_arquivo se a data for referente a sete ou mais (<=) dias atrás
    # Python nos permite fazer esses cálculos de forma simples como se fossem número inteiros
     if data_diário <= há_sete_dias:
         # Usa a biblioteca `shutil` para mover o arquivo para a `pasta_arquivo`
         move(diário, f"{pasta_arquivo}/{nome_arquivo}.md")
    

Conclusão

Noutro dia, ensino como fazer com que esse script seja executado automaticamente, diariamente à meia-noite e um minuto. Por enquanto, fique com o script completo:

from datetime import date, datetime, timedelta
from glob import glob
from pathlib import Path
from shutil import move
import os

pasta_script = os.path.dirname(os.path.abspath(__file__))
pasta_raiz = Path(pasta_script).parent
pasta_arquivo = f"{pasta_raiz}/Antigos"
notas_diárias = glob(f"{pasta_raiz}/20*.md")

hoje = date.today()
há_sete_dias = hoje - timedelta(days=7)

for diário in notas_diárias:
    # Nome do arquivo sem a extensão
    nome_arquivo = Path(diário).stem
    data_diário = datetime.strptime(nome_arquivo, "%Y-%m-%d").date()

    if data_diário <= há_sete_dias:
        move(diário, f"{pasta_arquivo}/{nome_arquivo}.md")