{"id":15032041,"url":"https://github.com/mindflavor/tormov","last_synced_at":"2025-04-09T21:22:54.055Z","repository":{"id":57670209,"uuid":"102852947","full_name":"MindFlavor/tormov","owner":"MindFlavor","description":"TORrent MOVer: a configurable torrent folder mover","archived":false,"fork":false,"pushed_at":"2020-02-17T08:52:30.000Z","size":17,"stargazers_count":6,"open_issues_count":0,"forks_count":1,"subscribers_count":3,"default_branch":"master","last_synced_at":"2024-03-15T07:49:32.005Z","etag":null,"topics":["rust-language","script","torrent"],"latest_commit_sha":null,"homepage":"https://mindflavor.github.io/tormov/","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/MindFlavor.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2017-09-08T11:10:05.000Z","updated_at":"2023-01-29T04:56:39.000Z","dependencies_parsed_at":"2022-09-26T20:40:51.790Z","dependency_job_id":null,"html_url":"https://github.com/MindFlavor/tormov","commit_stats":null,"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MindFlavor%2Ftormov","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MindFlavor%2Ftormov/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MindFlavor%2Ftormov/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MindFlavor%2Ftormov/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/MindFlavor","download_url":"https://codeload.github.com/MindFlavor/tormov/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248112944,"owners_count":21049759,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["rust-language","script","torrent"],"created_at":"2024-09-24T20:17:11.089Z","updated_at":"2025-04-09T21:22:54.030Z","avatar_url":"https://github.com/MindFlavor.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# TORMOV\n\n[![legal](https://img.shields.io/github/license/mindflavor/tormov.svg)](LICENSE)\n\n[![Crate](https://img.shields.io/crates/v/tormov.svg)](https://crates.io/crates/tormov)  [![cratedown](https://img.shields.io/crates/d/tormov.svg)](https://crates.io/crates/tormov) [![cratelastdown](https://img.shields.io/crates/dv/tormov.svg)](https://crates.io/crates/tormov)\n\n[![tag](https://img.shields.io/github/tag/mindflavor/tormov.svg)](https://github.com/MindFlavor/tormov/tree/v0.3.1)\n[![release](https://img.shields.io/github/release/mindflavor/tormov.svg)](https://github.com/MindFlavor/tormov/tree/v0.3.1)\n[![commitssince](https://img.shields.io/github/commits-since/mindflavor/tormov/v0.3.1.svg)](https://img.shields.io/github/commits-since/mindflavor/tormov/v0.3.1.svg)\n\n## TORrentMOVer\n\nSimple script program to move completed torrents to specific folders.\n\nSometimes it's easy to let torrent download files to a generic directory and then move it afterwards. This program automates this task by:\n\n1. Looking for RegEx patterns in the folder. You can specify exactly which folder/file to handle.\n1. Checking if the downloads are completed. Every file (if there are more than one) must be completed.\n1. Moving or linking the file/folder to the designated directory.\n\nThe program is written in Rust so it's very quick and light on your system. The source code is very small so you can check yourself what it does in few moments.\n\n## Installation\n\n1. Make sure to have Rust installed. Grab it here [https://www.rust-lang.org/en-US/](https://www.rust-lang.org/en-US/) if you don't have it. This program is tested with rustc nightly but it should work with others versions too (I'm too lazy to test it myself, sorry :smile: ).\n1. Install the tool with ```cargo install tormov```. This will install the latest published version. If you want the master branch use ```cargo install --git https://github.com/MindFlavor/tormov``` instead.\n1. type ```tormov``` in the console to test the program execution. You'll get an error because of missing parameters. We'll cover them in the next section.\n\n## Parameters\n\nTORMOV expects, from the command line, two parameters:\n\n1. Configuration file.\n1. Folder to analyze.\n\nSo, for example, if you have a configuration file called ```tormov_config.json``` and you want to check the ```/var/lib/transmission-daemon/downloads/``` you can write:\n\n```bash\n$ tormov tormov_config.json /var/lib/transmission-daemon/downloads/\n```\n\n## Configuration file\n\nA sample configuration file is available here: [example_config.json](https://github.com/MindFlavor/tormov/blob/master/example_config.json). The format, however, is simple.\n\n```json\n{\n    \"skipextension\": \"part\",\n    \"matches\": [\n        {\n            \"regex\": \"Arrow\",\n            \"destination\": \"/mnt/shows/Arrow\",\n\t    \"action\": \"Move\"\n        },\n        {\n            \"regex\": \"Big.Bang\",\n            \"destination\": \"/mnt/shows/The.big.bang.theory\",\n\t    \"action\": \"Move\"\n        },\n        {\n            \"regex\": \"Marvels.Agents.of.S.H.I.E.L.D.*\",\n            \"destination\": \"/mnt/shows/agents_of_the_shield\",\n\t    \"action\": \"Link\"\n        }\n    ]\n}\n```\n\n### skipextension\n\n```skipextension``` is the extension appended whenever the file is not ready. Most torrent clients use ```part``` or ```incomplete``` but make sure to specify the right one.\n\n### matches\n\nThe ```matches``` section is an array of entries you want to check. Each entry must have:\n\n1. A regular expression to match in the field ```regex```.\n1. A destination in the ```destination``` field. The destination is where the file/folder will be moved if the contents have been completely downloaded (that is, there is no file with ```skipextension``` anywhere in the folder).\n1. An action to perform in case all the rules match. The supported actions are ```Move``` or ```Link```. The latter will create a symbolic link instead of moving the file. *Note*: right now linking is supported only on Linux, if you need Windows please drop a line.\n\n## Scheduling\n\nWhile TORMOV does not have a scheduler it's fairly easy to automate it with cron jobs or systemd. For example with systemd you can schedule it creating two files. The first is ```tormov.service``` with these contents:\n\n```\n\n[Unit]\nDescription=TORrent MOVer\n\n[Service]\nExecStart=\u003cfull TORMOV bin path\u003e \u003cconfig\u003e \u003cfolder\u003e\n\n```\n\nAnd another one called ```tormow.timer``` with the schedule:\n\n```\n\n[Unit]\nDescription=Runs tormov every minute\n\n[Timer]\nOnBootSec=5min\nOnUnitActiveSec=1min\n\nUnit=tormov.service\n\n[Install]\nWantedBy=timers.target\n\n```\n\nNow simply start end optionally enable the timer with:\n\n```bash\n\n$ sudo systemctl start tormov.timer\n$ sudo systemctl enable tormov.timer\n\n```\n\nYou can then check the output with ```sudo systemctl status tormov.service``` as usual.\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmindflavor%2Ftormov","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmindflavor%2Ftormov","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmindflavor%2Ftormov/lists"}