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