| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- #!/usr/bin/env python3
- #
- # This script is supposed to be executed with cron
- # (https://en.wikipedia.org/wiki/Cron)
- #
- # This script also assumes that your weechat logfile mask is:
- # /set logger.mask.irc "irc/$server/%Y-%m/%d-$channel.weechatlog"
- #
- # Once you're set up, remember to change dryrun=True to False to
- # actually make the script remove files.
- import os
- import re
- import sys
- from datetime import datetime, timedelta
- from os.path import join, isfile
- # Full path to your weechat IRC log directory
- LOG_BASE = "/home/user/.local/share/weechat/logs/irc"
- pattern = re.compile(r'(\d{4}-\d{2})/(\d{2})-(.+).weechatlog$')
- # Delete logs older than this many days
- # In your crontab, you can set it to run every day at 2pm:
- # 0 14 * * * /usr/bin/python3 /full/path/to/this/script.py
- PURGE_END = datetime.now() - timedelta(days=7)
- # Map of "server": ["#channel0", "#channel1", "user"] to purge.
- PURGE_MAP = {
- "darkfi": ["#dev", "#math", "god"],
- "libera": ["##rust"],
- }
- def main(dryrun=True):
- to_delete = []
- for server, channels in PURGE_MAP.items():
- for dirpath, _dirnames, filenames in os.walk(join(LOG_BASE, server)):
- for filename in filenames:
- full_path = join(dirpath, filename)
- match = pattern.search(full_path)
- if match:
- date_str = "-".join(match.groups()[:-1])
- channel = match.groups()[-1]
- if channel not in channels:
- continue
- file_date = datetime.strptime(date_str, "%Y-%m-%d")
- if file_date < PURGE_END:
- to_delete.append(full_path)
- if dryrun:
- for fname in to_delete:
- print(f"[DRYRUN] Deleting: {fname}")
- return 0
- for fname in to_delete:
- if isfile(fname):
- try:
- os.remove(fname)
- except:
- print(f"[WARNING] Failed to remove {fname}")
- continue
- return 0
- if __name__ == "__main__":
- sys.exit(main())
|