import os import re import argparse def remove_obsidian_links(file_path): """ Lit un fichier .md, supprime les crochets des liens Obsidian de type [[texte]] ou [[texte|alias]], en gardant le texte affiché (alias si présent, sinon le texte), et écrit le fichier modifié. """ with open(file_path, 'r', encoding='utf-8') as f: content = f.read() # Regex pour matcher [[texte|alias]] ou [[texte]] # Groupe 1: texte (cible), Groupe 2: alias (optionnel) pattern = r'\[\[(.*?)(?:\|(.*?))?\]\]' def replace_link(match): if match.group(2): # Si alias présent return match.group(2) else: # Sinon, le texte return match.group(1) new_content = re.sub(pattern, replace_link, content) with open(file_path, 'w', encoding='utf-8') as f: f.write(new_content) print(f"Crochets supprimés dans : {file_path}") def main(): parser = argparse.ArgumentParser(description="Supprime les crochets des liens Obsidian [[...]] des fichiers .md dans un dossier et ses sous-dossiers, en gardant le texte affiché.") parser.add_argument('dossier', help="Chemin du dossier à parcourir (ex: '/chemin/vers/votre/vault')") args = parser.parse_args() dossier = args.dossier if not os.path.exists(dossier): print(f"Erreur : Le dossier '{dossier}' n'existe pas.") return # Parcours récursif des fichiers .md for root, dirs, files in os.walk(dossier): for file in files: if file.endswith('.md'): file_path = os.path.join(root, file) try: remove_obsidian_links(file_path) except Exception as e: print(f"Erreur lors du traitement de {file_path} : {e}") if __name__ == "__main__": main()