From 3c0cd71bc9b7ec681a2ff373c1385cca53a9a3bf Mon Sep 17 00:00:00 2001 From: Christian Segundo Date: Fri, 6 Oct 2023 18:34:26 +0200 Subject: delete files if unlinked --- scripts/delete-if-unlinked.py | 53 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 scripts/delete-if-unlinked.py (limited to 'scripts/delete-if-unlinked.py') diff --git a/scripts/delete-if-unlinked.py b/scripts/delete-if-unlinked.py new file mode 100644 index 0000000..54df8ff --- /dev/null +++ b/scripts/delete-if-unlinked.py @@ -0,0 +1,53 @@ +#!/usr/bin/env python3 +import click +import os +from transmission_rpc import Client +from datetime import timedelta, datetime + + +def convert_to_seconds(s): + units = {"s": "seconds", "m": "minutes", + "h": "hours", "d": "days", "w": "weeks"} + count = int(s[:-1]) + unit = units[s[-1]] + td = timedelta(**{unit: count}) + return td.seconds + 60 * 60 * 24 * td.days + +def has_links(torrent): + for file in torrent.get_files(): + file_path = torrent.download_dir + '/' + file.name + if not os.path.exists(file_path): + continue + if os.stat(file_path).st_nlink > 1: + return True + return False + + +@click.command() +@click.option('--port', default=9091) +@click.option('--host', default="localhost") +@click.option('--tag', required=True) +@click.option('--min-age', default='1w') +def main(host, port, tag, min_age): + """ Deletes torrents older than the specified age if no file has a link. """ + + c = Client(host=host, port=port) + torrents = c.get_torrents() + for torrent in torrents: + if tag not in torrent.labels: + continue + + specified_age = convert_to_seconds(min_age) + age_in_seconds = int((datetime.today().timestamp() - + torrent.done_date.timestamp())) + + if age_in_seconds < specified_age: + continue + + if not has_links(torrent): + print(f"Deleting {torrent.name}") + c.remove_torrent(torrent.id, delete_data=True) + + +if __name__ == '__main__': + main() -- cgit v1.2.3