Helps you remove your transmission torrents which have no hardlinks
This project has been archived.
The maintainers of this project have marked this project as archived. No new releases are expected.
Project description
Transmission unlinked file cleaner
A CLI tool to help you clean up Transmission torrents that don't have hardlinks to other files on your system.
This is particularly useful if you're using Transmission with media management tools like Sonarr, Radarr, or similar applications that create hardlinks to your torrent files. This tool helps you identify and remove torrents whose files are no longer hardlinked anywhere else.
Installation
Quick Install (Recommended)
If you haven't yet, install uv (curl -LsSf https://astral.sh/uv/install.sh | sh). It's a massive painkiller for the python management headache.
# Using uv (recommended for CLI tools)
uv tool install transmission-unlinked
# Or from source
git clone https://github.com/flying-sausages/transmission-unlinked.git
cd transmission-unlinked
uv tool install .
Usage
After installation, you can run the tool using the transmission-unlinked command:
transmission-unlinked --settings-file ~/.config/transmission-daemon/settings.json --password YOUR_PASSWORD
Arguments
you can see the latest commandline args by running the following:
transmision-unlinked --help
Currently, this looks like the following:
usage: transmission-unlinked [-h] [-d DIRECTORY] [-t TRACKER] [--min-days MIN_DAYS]
[--action {None,list,l,delete,d,remove,r}] [--settings-file SETTINGS_FILE]
[--protocol {http,https}] [--username USERNAME] --password PASSWORD
[--host HOST] [--port PORT] [--path PATH]
Clean up Transmission torrents based on hardlink status
options:
-h, --help show this help message and exit
-d, --dir, --directory DIRECTORY
Filter torrents by download directory (substring match)
-t, --tracker TRACKER
Filter torrents by announce URL (substring match)
--min-days MIN_DAYS Minimum days of active seeding time (default: 7)
--action {None,list,l,delete,d,remove,r}
Action to apply to torrents without any other hardlinks. Interactive by default |
list / l: show torrents only | delete / d: remove torrent with data on disk | remove
/ r: remove torrent from client only |
authentication:
--settings-file SETTINGS_FILE
Path to Transmission settings.json file
--protocol {http,https}
Protocol to use (default: http)
--username USERNAME Transmission username
--password PASSWORD Transmission password
--host HOST Transmission host (default: 127.0.0.1)
--port PORT Transmission port (default: 9091)
--path PATH Transmission RPC path (default: /transmission/rpc)
Arrs setup suggestion:
- Have something (Plex/maintainerr/etc.) automatically delete things
- Make sure your arr has
Unmonitor Deleted Episodesset to True - In the arr's download client settings, set a value for
Category(this moves downloaded torrents into the following ) - use that for the directory argument (
transmission-unlinked --directory Sonarr) - After playing around with the tool, add something like this to your crontab to run daily at 3am:
0 3 * * * /path/to/transmission-unlinked --settings-file ~/.config/transmission-daemon/settings.json --password YOUR_PASSWORD --directory /path/to/sonarr --action delete >> /var/log/transmission-unlinked.log 2>&1
Development
# Set the project up
uv sync
# Run linting
ruff check .
# Run type checking
basedpyright
# Run tests
uv run pytest
Safety Notes
- Always test with
--action listfirst to see what would be affected - Use interactive mode when unsure about automatic removal
- Backup your data before performing bulk deletions
- The tool requires direct filesystem access to check hardlinks
License
MIT License - See LICENSE file for details
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file transmission_unlinked-0.2.1.tar.gz.
File metadata
- Download URL: transmission_unlinked-0.2.1.tar.gz
- Upload date:
- Size: 10.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.9.18 {"installer":{"name":"uv","version":"0.9.18","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
58742977e54ad28e166cd2c3e02470a982a85980693fb592c4bce768fbc4b5b0
|
|
| MD5 |
2ce17f47efcfa167c9d6fefa5197c6f9
|
|
| BLAKE2b-256 |
144b489aa90a00e8a76591746d165ac4070fea791fae0d2d417fb29061080817
|
File details
Details for the file transmission_unlinked-0.2.1-py3-none-any.whl.
File metadata
- Download URL: transmission_unlinked-0.2.1-py3-none-any.whl
- Upload date:
- Size: 7.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.9.18 {"installer":{"name":"uv","version":"0.9.18","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b69dd5016e4dae19b513944357ab8a8666bafde2ae708d0a6f85b8ff76e19bda
|
|
| MD5 |
6b80c52ad1256656b3a1fe3c416beb30
|
|
| BLAKE2b-256 |
fa2a8fc97e724b97439e6af4f314e637b801875f48bcb16e61d226e783ef80b1
|