Mover automaticamente diários para uma pasta arquivo
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
- Usar uma expressão glob para localizar todos os arquivos
*.md
na pasta raiz:20*.md
; - Se o nome do arquivo NÃO faz referência aos últimos sete dias, movê-lo para a pasta
Antigos
;
Algoritmo
- 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
- 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 ("
).
- Se você quiser mudar o nome da pasta em que as notas diárias serão arquivadas, altere o final da variável
- 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)
- Percorrer as notas diárias da pasta raiz
for diário in notas_diárias:
- 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()
- 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")