cleanup script
This commit is contained in:
parent
28ee12a6a1
commit
49d60059cf
1 changed files with 90 additions and 0 deletions
90
scripts/cleanup
Executable file
90
scripts/cleanup
Executable file
|
@ -0,0 +1,90 @@
|
||||||
|
#!/usr/bin/env python
|
||||||
|
|
||||||
|
"""
|
||||||
|
Remove cache and other automatically created stuff that is always safe to remove when we need some more space in a pinch
|
||||||
|
"""
|
||||||
|
|
||||||
|
import argparse
|
||||||
|
from pathlib import Path
|
||||||
|
import subprocess
|
||||||
|
import shutil
|
||||||
|
|
||||||
|
from rich.progress import (
|
||||||
|
Progress,
|
||||||
|
SpinnerColumn,
|
||||||
|
FileSizeColumn,
|
||||||
|
TimeElapsedColumn,
|
||||||
|
TextColumn,
|
||||||
|
)
|
||||||
|
from rich import filesize
|
||||||
|
|
||||||
|
jetbrains_dir = Path().home() / "Library/Caches/JetBrains"
|
||||||
|
rubymine = []
|
||||||
|
for mine in jetbrains_dir.glob('RubyMine*'):
|
||||||
|
rubymine.append(mine / 'index')
|
||||||
|
rubymine.append(mine / 'cache')
|
||||||
|
|
||||||
|
pycharm = []
|
||||||
|
for charm in jetbrains_dir.glob('PyCharm*'):
|
||||||
|
pycharm.append(charm / 'index')
|
||||||
|
pycharm.append(charm / 'vcs-log')
|
||||||
|
pycharm.append(charm / 'caches')
|
||||||
|
|
||||||
|
paths = [
|
||||||
|
*rubymine,
|
||||||
|
*pycharm,
|
||||||
|
Path().home() / "Library/Caches/JetBrains/RubyMine*/caches",
|
||||||
|
Path().home() / "Library/Caches/JetBrains/PyCharm*/index",
|
||||||
|
Path().home() / "Library/Caches/JetBrains/PyCharm*/vcs-log",
|
||||||
|
Path().home() / "Library/Caches/JetBrains/PyCharm*/caches",
|
||||||
|
Path().home() / "Library/Caches/Yarn",
|
||||||
|
Path().home() / "Library/Caches/node-gyp",
|
||||||
|
Path().home() / "Library/Caches/pdm/http",
|
||||||
|
Path().home() / "Library/Caches/com.spotify.client/Default/Cache",
|
||||||
|
Path().home() / "Library/Caches/kdenlive",
|
||||||
|
Path().home() / "Library/Caches/pip/http-v2",
|
||||||
|
Path().home() / "Library/Caches/go-build",
|
||||||
|
]
|
||||||
|
paths = [Path(p) for p in paths]
|
||||||
|
|
||||||
|
def dir_size(path: Path) -> int:
|
||||||
|
return sum(file.stat().st_size for file in path.rglob('*'))
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
parser = argparse.ArgumentParser()
|
||||||
|
parser.add_argument('--check', action="store_true", help="just show sizes, no delete")
|
||||||
|
parser.add_argument('--keep-pycharm', action="store_true")
|
||||||
|
args = parser.parse_args()
|
||||||
|
if args.keep_pycharm:
|
||||||
|
paths = [p for p in paths if 'pycharm' not in str(p).lower()]
|
||||||
|
if args.check:
|
||||||
|
msg = "Checking clearable space"
|
||||||
|
else:
|
||||||
|
msg = "Clearing space"
|
||||||
|
|
||||||
|
|
||||||
|
total_size = 0
|
||||||
|
with Progress(
|
||||||
|
SpinnerColumn(),
|
||||||
|
*Progress.get_default_columns(),
|
||||||
|
TextColumn("{task.fields[size]}"),
|
||||||
|
transient=False
|
||||||
|
) as progress:
|
||||||
|
task = progress.add_task(f"[green] {msg}", total=len(paths), size="0")
|
||||||
|
for path in paths:
|
||||||
|
size = dir_size(path)
|
||||||
|
total_size += size
|
||||||
|
total_size_str = filesize.decimal(int(total_size))
|
||||||
|
file_msg = filesize.decimal(int(size))
|
||||||
|
|
||||||
|
if not args.check and path.exists() and size > 0:
|
||||||
|
try:
|
||||||
|
shutil.rmtree(path)
|
||||||
|
except Exception as e:
|
||||||
|
file_msg = f"Error removing: {e}"
|
||||||
|
|
||||||
|
|
||||||
|
progress.update(task, advance=1, size=total_size_str)
|
||||||
|
progress.log(file_msg, path)
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue