Skip to content

Instantly share code, notes, and snippets.

@ygivenx
Last active August 28, 2022 19:21
Show Gist options
  • Save ygivenx/0846b5c6c9fec2c9d390d0d9a572f113 to your computer and use it in GitHub Desktop.
Save ygivenx/0846b5c6c9fec2c9d390d0d9a572f113 to your computer and use it in GitHub Desktop.
This scritps renames daily files from Roam Research format to a given obsidian format.
"""
This script renames the daily files from roam research
to an specified format - 1900-12-25-Sunday.md
Change the default_date_fmt to your required Daily Note Format
Usage:
--------
pip install typer[all]
Usage: roam-to-obsidian.py [OPTIONS] PATH [NEW_FILE_DIR] [NEW_FILE_FORMAT]...
[NEW_FILE_EXT] [DRY_RUN]
╭─ Arguments ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ * path TEXT path to folder with markdown files from roam [default: None] [required] │
│ new_file_dir [NEW_FILE_DIR] parent folder of all new files [default: Timestamps] │
│ new_file_format [NEW_FILE_FORMAT]... parent folder of all new files [default: None] │
│ new_file_ext [NEW_FILE_EXT] file ext for new files (".md", ".txt") [default: .md] │
│ dry_run [DRY_RUN] do a dry run [default: True] │
╰────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
"""
from pathlib import Path
import re
import datetime
import typer
from typer import Typer
import typing
app = Typer()
# create relevant directories
def ensure(path):
path.parent.mkdir(parents=True, exist_ok=True)
return path
def get_new_filename(new_file_date: datetime.datetime,
new_file_dir: str,
new_file_format: typing.List,
file_ext: str = "md") -> str:
res = []
res.append(new_file_dir)
for file_format in new_file_format:
res.append(new_file_date.strftime(file_format))
return "/".join(res) + file_ext
@app.command()
def rename_files(path: str = typer.Argument(..., help="path to folder with markdown files from roam"),
new_file_dir: str = typer.Argument("Timestamps", help="parent folder of all new files"),
new_file_format: typing.List[str] = typer.Argument(None, help="date formats for folder/filename"),
new_file_ext: str = typer.Argument(".md", help='file ext for new files (".md", ".txt")'),
dry_run: bool = typer.Argument(True, help="do a dry run")):
datadir = Path(path)
roam_file_fmt = re.compile(r"(\w+) (\d{1,2})\w{2}, (\d{4})")
file_renamed = 0
if not new_file_format:
new_file_format = ["%Y", "%m-%B", "%Y-%m-%d-%A"]
for file in datadir.glob("*.md"):
groups = roam_file_fmt.match(str(file.name))
if groups:
file_renamed += 1
new_file_date = datetime.datetime.strptime(f"{groups[3]}-{groups[1]}-{groups[2]}","%Y-%B-%d")
new_file_name = datadir / get_new_filename(new_file_date, new_file_dir, new_file_format, new_file_ext)
print(str(new_file_name))
if not dry_run:
file.rename(ensure(new_file_name))
res = {"# file renamed": file_renamed}
if dry_run:
res["action"] = f"None - set dry-run to False to rename {file_renamed} files"
else:
res["action"] = f"Renamed {file_renamed} files"
print(res)
return str(res)
if __name__ == "__main__":
app()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment