Last active
August 28, 2022 19:21
-
-
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 file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
""" | |
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