new daterake

This commit is contained in:
Q
2025-11-07 20:19:02 +02:00
parent cc16e99eb6
commit 920e74b97a

View File

@@ -1,13 +1,12 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
import argparse import argparse
import glob
import json import json
import os import os
import sys import sys
from datetime import datetime, timedelta from datetime import datetime
__version__ = "20251107.01" __version__ = "20251107.02"
def filter_entries(entries, years=6, months=6, weeks=6, days=6, head=5): def filter_entries(entries, years=6, months=6, weeks=6, days=6, head=5):
@@ -56,7 +55,6 @@ def filter_entries(entries, years=6, months=6, weeks=6, days=6, head=5):
result.extend([entry for i, entry in enumerate(reduce(entries, date2month, start_date, "month")) if i < months]) result.extend([entry for i, entry in enumerate(reduce(entries, date2month, start_date, "month")) if i < months])
start_date = result[-1][1].date() start_date = result[-1][1].date()
result.extend([entry for i, entry in enumerate(reduce(entries, date2year, start_date, "year")) if i < years]) result.extend([entry for i, entry in enumerate(reduce(entries, date2year, start_date, "year")) if i < years])
start_date = result[-1][1].date()
result.sort(key=lambda x: x[1], reverse=True) result.sort(key=lambda x: x[1], reverse=True)
@@ -67,7 +65,8 @@ def filter_entries(entries, years=6, months=6, weeks=6, days=6, head=5):
def get_opts(): def get_opts():
parser = argparse.ArgumentParser( parser = argparse.ArgumentParser(
description="Filter entries based on file timestamps, or parse dates. Filenames read from stdin" description="Filter entries based on file timestamps, or parsed dates for keeping backups for example. Filenames read from stdin. ",
epilog="Example usage (watch out for actual deletion): # ls | grep ^backup- | daterake -n 5 --drop | xargs echo rm -v ",
) )
parser.add_argument("--version", action="version", version=__version__) parser.add_argument("--version", action="version", version=__version__)
@@ -88,7 +87,7 @@ def get_opts():
) )
parser.add_argument("--json", default=False, action="store_true", help="Print output as JSON") parser.add_argument("--json", default=False, action="store_true", help="Print output as JSON")
parser.add_argument("--verbose", "-v", default=False, action="store_true", help="Print output as verbose table") parser.add_argument("--verbose", "-v", default=False, action="store_true", help="Print output as verbose table")
parser.add_argument("--invert", default=False, action="store_true", help="Print names to remove") parser.add_argument("--invert", "--drop", default=False, action="store_true", help="Print the names to remove")
parser.add_argument( parser.add_argument(
"--parse", default=None, help="Parse names, instead of using file timestamps (ex: 'service-%%Y-%%m-%%d.log')" "--parse", default=None, help="Parse names, instead of using file timestamps (ex: 'service-%%Y-%%m-%%d.log')"