Skip to content

Instantly share code, notes, and snippets.

@xqm32
Last active March 23, 2025 11:10
Show Gist options
  • Save xqm32/4b90d17a838c8f3ff3007fca631cd88f to your computer and use it in GitHub Desktop.
Save xqm32/4b90d17a838c8f3ff3007fca631cd88f to your computer and use it in GitHub Desktop.
#!/usr/bin/env -S uv run --script --quiet
# /// script
# requires-python = ">=3.13"
# dependencies = []
# ///
import json
from pathlib import Path
import shutil
workspaces_dir = Path(__file__).readlink().parent.resolve()
projects_dir = workspaces_dir.parent.joinpath("Projects").resolve()
def main() -> None:
projects = set(i for i in projects_dir.glob("*") if i.is_dir())
discarded: set[Path] = set()
for workspace_file in workspaces_dir.glob("*.code-workspace"):
workspace = json.loads(workspace_file.read_text())
folders = workspace.get("folders", [])
for folder in folders:
project = workspaces_dir.joinpath(folder["path"]).resolve()
discarded.add(project)
discarded_info = ", ".join(i.name for i in discarded)
to_delete_info = ", ".join(i.name for i in projects - discarded)
print(f"Discarded: {discarded_info}")
print(f"To delete: {to_delete_info}")
if len(projects - discarded) == 0:
print("Nothing to delete")
return
choice = input("Delete? [y/N]: ").lower()
match choice:
case "y" | "yes":
for i in projects - discarded:
print(f"Deleting: {i.name}")
shutil.rmtree(i)
case _:
print("Nothing deleted")
if __name__ == "__main__":
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment