|
|
@@ -1,17 +1,46 @@
|
|
|
#!/usr/bin/env python3
|
|
|
|
|
|
import logging
|
|
|
+import argparse
|
|
|
+import os
|
|
|
+import sys
|
|
|
+import shutil
|
|
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
-def launch(keeps):
|
|
|
- # TODO
|
|
|
- root = "change-me"
|
|
|
- logger.warning("try to clean %s and keep %d records", root, keeps)
|
|
|
- logger.info("done.")
|
|
|
-
|
|
|
+
|
|
|
+def launch(root, keeps, debug):
|
|
|
+ logger.warning("try to clean %s and keep recent %d items", root, keeps)
|
|
|
+ items = os.listdir(root)
|
|
|
+ logger.debug("found %d files", len(items))
|
|
|
+ if len(items) <= keeps:
|
|
|
+ return
|
|
|
+ items.sort(key=lambda it: os.path.getmtime(
|
|
|
+ os.path.join(root, it)), reverse=True)
|
|
|
+ items = items[keeps:]
|
|
|
+ for it in items:
|
|
|
+ it = os.path.join(root, it)
|
|
|
+ logger.warning("delete %s", it)
|
|
|
+ if not debug:
|
|
|
+ shutil.rmtree(it)
|
|
|
+
|
|
|
+
|
|
|
if __name__ == "__main__":
|
|
|
- logging.basicConfig(level=logging.DEBUG, format='%(asctime)s %(levelname).1s %(name)s: %(message)s')
|
|
|
- # TODO
|
|
|
- launch(7)
|
|
|
-
|
|
|
+ parser = argparse.ArgumentParser(
|
|
|
+ prog='mint',
|
|
|
+ description='Clean legacy files',
|
|
|
+ epilog='https://github.com/iapt-platform/mint')
|
|
|
+ parser.add_argument('-k', '--keep', type=int, default=7)
|
|
|
+ parser.add_argument('-d', '--debug', action='store_true')
|
|
|
+ parser.add_argument('-v', '--version', action='version',
|
|
|
+ version='%(prog)s v2026.1.17')
|
|
|
+ args = parser.parse_args()
|
|
|
+ logging.basicConfig(
|
|
|
+ level=logging.DEBUG if args.debug else logging.INFO, format='%(asctime)s %(levelname).1s %(name)s: %(message)s')
|
|
|
+ logging.debug('run on debug mode')
|
|
|
+ if args.keep < 2:
|
|
|
+ logging.error("keeps must lager than 2")
|
|
|
+ sys.exit(1)
|
|
|
+ root = os.getcwd()
|
|
|
+ launch(root, args.keep, args.debug)
|
|
|
+ logger.info("done.")
|