Snaps do have a purge argument but I always forget to use it. I wrote a script in Python to help with my laziness and remove old Snap data for me. This will only remove snap data for apps that have been uninstalled. If you want to keep the data and configs for some apps you will need to include the name in preserve list. This could be altered to handle Flatpak apps as well.
#!/usr/bin/env python3
import os
import shutil
import subprocess as sp
def get_installed_snaps():
'''Collect installed snaps.'''
snap_names = []
result = sp.run(["snap", "list"], capture_output=True, text=True, check=True)
if not result.stderr:
raw_list = result.stdout.split('\n')
for app in raw_list:
if not app: continue
snap_names.append(app.split()[0].strip().lower())
return snap_names
def get_snap_folders():
'''Collect all snap app folders.'''
snap_confs = {}
home = os.path.join(os.environ['HOME'],"snap")
for folder in os.listdir(home):
if not folder.strip(): continue
snap_confs[folder]=os.path.join(home,folder.strip().lower())
return snap_confs
# User defined.
preserve = ["some_app_name", "another"] # Make sure the name is lowercase and matches exactly what is found.
do_delete = False
# Main
installed = get_installed_snaps()
configs = get_snap_folders()
for appnm,apppth in configs.items():
if appnm not in installed:
if appnm.lower() in preserve:
continue
print('removing ', apppth)
if do_delete:
shutil.rmtree(apppth)