Code Monkey home page Code Monkey logo

nzbget-tidyit's Introduction

Note: This script was intended to be an NZBGet and Scheduling script for NZBGet. However, it also works perfectly well as a standalone script for others too! It can be easily adapted to anyone's environment. See the Command Line section below for details how you can easily use this on it's own (without NZBGet).

Paypal

TidyIt Scheduler Script

TidyIt is a script designed to tidy up your video library; house cleaning one could say. It takes care of directories that once held video content, but now is just either empty, or contains old meta data and other junk.

This script is especially useful if you use a third party application such as Plex or KODI (XBMC) to manage your video library. It also works great for Synology devices too. In fact, most third party applications and/or appliances that allow you to remove a video from your library will only remove the video itself. They will not remove all the other content that surrounds it.

Since the primary focus of this script is to remove content from your media library, I will not be held responsible for any irrecoverable data loss you experience. I can confirm the tool works for me, but that doesn't mean it will work for you. The good news is that the script is filled with safe guards! Thus you'd have to stray far from the default settings to damage your library.

The script intentionally operates in a log only mode by default unless you explicitly specify it to run differently. I encourage you to run the script in this log only mode first anyway; get an idea as to what it wants to do and the files it wants to handle. If you're happy with its decisions, you can flip a switch (to the Move or Delete mode) and the script will begin tidying up your library as promised to you.

The script operates in 3 modes:

  • Preview: This is the default option. It runs the script and just reports to the screen what it would have otherwise done. It doesn't actually do anthing at all to your library though. This might be all you need as it's output can allow you to take your own actions. Alternatively this is a great method to run in until you get the options the way you like them.
  • Delete: This mode performs the same check the Preview does however anything flagged to be handled is removed.
  • Move: This mode moves handled content into another directory (that you identify). This allows you to review what is considered junk and decide for yourself if it should be removed. This method also requires you to be responsible for managing the directory you move content to.

Installation Instructions

  1. Ensure you have at least Python v2.7 or higher installed onto your system.
# Pull in dependencies:
pip install -r requirements.txt
  1. Simply place the TidyIt.py into your NZBGet scripts directory.
    • NZBGet users: you will want to place these inside of your nzbget/scripts directory. Please ensure you are running (at least) NZBGet v11.0 or higher. You can acquire the latest version of of it from here.

The Non-NZBGet users can also use this script via a cron (or simply call it from the command line) to automatically tidy their directories too. See the Command Line section below for more instructions on how to do this.

Command Line

TidyIt.py has a built in command line interface that can be easily tied to a cron entry or can be easilly called from the command line to automate the cleanup of your media libraries.

Here are the switches available to you:

Usage: TidyIt.py [options] [scandir1 [scandir2 [...]]]

Options:
  -h, --help            Show this help message and exit.
  -n ENCODING, --encoding=ENCODING
                        The system encoding to use (utf-8, ISO-8859-1, etc).
                        The default value is 'UTF-8'.
  -s ENTRIES, --safe-entries=ENTRIES
                        If a safe-entry file/dir is located within a path
                        scanned then the path is ignored. Use safe-entry files
                        (or dirs) to intentionally ignore directories of your
                        choice that reside in your video library. You can
                        specify more then one safe-entry by separating them
                        with a comma (,). The default value(s) are
                        '.tidysafe'.
  -t ENTRIES, --always-trash=ENTRIES
                        Identify any file extensions you wish to always trash
                        if matched. By default this is not set. You can
                        specify more then one trash entry by separating each
                        of them with a comma (,).
  -M ENTRIES, --meta-content=ENTRIES
                        Identify any files and/or directories that should be
                        treated as meta content. Meta content is only handled
                        if it's the last thing within a media directory. You
                        can specify more then one meta entry by separating
                        each of them with a comma (,). By Default the
                        following are already defined: 'Thumbs.db', '@eaDir',
                        '.wdtv', '.DS_Store', '.AppleDouble', '__MACOSX'.
  -m SIZE_IN_MB, --video-minsize=SIZE_IN_MB
                        Specify the minimum size a video must be before it's
                        treated as part of your collection. This value is used
                        to diffentiate between video file and samples files.
                        This value is interpreted in MB (Megabytes) and
                        defaults to 150 MB.
  -x ENTRIES, --video-extras=ENTRIES
                        Identify the extra files you keep around with your
                        video files as a comma delimited lit. The script will
                        scan for these files explicitly and remove them if a
                        video file bearing the same name is not found.  For
                        this reason you do not want to specify video
                        extensions here. This defaults to '.nfo,.??.srt,.srt,.
                        sub,.txt,.sub,.idx,.jpg,.tbn,.nzb,.xml,.diz' if
                        nothing is specified.
  -a AGE_IN_SEC, --min-age=AGE_IN_SEC
                        Specify the minimum age a directory and/or file must
                        be before considering it for processing. This value is
                        interpreted in seconds and defaults to 3600 sec(s).
  -c, --clean           Unless this switch is specified, this script only runs
                        in a log only mode (a dry-run) allowing you to see the
                        actions the script would have otherwise performed.
                        This switch can be combined with the --move-path (-p)
                        switch to move handled instead.
  -p PATH, --move-path=PATH
                        Identifiy the path to place content into instead of
                        removing it.  By specifying a --move-path, the --clean
                        (-c) switch is implied however handled content is
                        moved instead of being removed.
  -k, --keep-directories
                        Do not delete video directories during cleanup.
  -L FILE, --logfile=FILE
                        Send output to the specified logfile instead of
                        stdout.
  -D, --debug           Debug Mode

Here is a simple example:

# Scan your library (print only mode)
python TidyIt.py /usr/share/TVShows
# Happy with the results? Okay then run the script with the --clean (-c) switch:

python TidyIt.py -c /usr/share/TVShows

You can scan multiple directories with the following command:

# Scan your libraries (print only mode)
python TidyIt.py /usr/share/TVShows /usr/share/Movies

If you don't want your content to be removed; you can just have handled content moved to another directory for your review later on. All directory paths are preserved so it won't take any rocket science to figure out where the removed content came from. It's basically a safer mode then the --clean (-c) switch provides.

# Scan your libraries and move any content to be handled to the
# TidyIt.Trash in your home directory (~ is supported)
python TidyIt.py -m ~/TidyIt.Trash /usr/share/TVShows

If the script behaves as you expect it should, you can schedule it as a cron to frequently clean your libraries every day with a command such as:

# $> crontab -e
0 0 * * * /path/to/TidyIt.py -c /usr/share/TVShows /usr/share/Movies

nzbget-tidyit's People

Contributors

caronc avatar war59312 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

nzbget-tidyit's Issues

safe-guarded files

I some times have files such as the following and TidyIt blocks cleaning the directories because of them.
I can add them to the -t option, but the safe-guarded files vary and I have to hunt them down.
I'm not sure why they are considered safe-guarded

Thanks

Samples below:

/de8c4fc4c9d9b3caacde7b72be637e.a4 (safe-guarded) 5b7359632b5c9890c664196eb.e7bf (safe-guarded) MQ3TKZRTMU2TCNZQG42GEN3CGZDEYZQ (safe-guarded)

How to install when pip isn't available?

Hi

So I'm no computer guru, but I'm trying to install this in a NZBGet container that doesn't have pip installed:

https://hub.docker.com/r/linuxserver/nzbget/

I copied the .py file to my scripts folder and restarted nzbget; now the item does show up in the list, but according to the install instructions I also NEED to run pip install -r requirements.txt and w/out pip installed how can I do this?

Any help appreciated! :)

It ran once but now runs differently :)

โ“ Question

I ran the script once on my TV share, found issues (some due to what I think were file names that were too long), and then after cleaning up some of the errors, not all, this is now what I get when I re-run it.

PS P:\usenet\scripts> python TidyIt.py /media/tv
2021-12-17 14:18:47,599 - 13952 - INFO - Scanning /media/tv
PS P:\usenet\scripts>

I am using "New-PSDrive -Name P -PSProvider FileSystem -Root \homeserver\data" to create a static drive of P: as well.

Thanks!

John

No Module "six"

๐Ÿชฒ Describe the bug
Trying to get this script to work on a containerized install of PG Blitz. NZBget can see the script but I get the error below. I've tried updating the pip and python, but to no avail.

๐Ÿ’ก Screenshots and Logs

Executing script TidyIt.py with command DoTidy
Traceback (most recent call last):
File "/config/scripts/TidyIt.py", line 279, in <module>
from nzbget import SKIP_DIRECTORIES
File "/usr/lib/python3.8/site-packages/nzbget/__init__.py", line 23, in <module>
from .ScriptBase import *
File "/usr/lib/python3.8/site-packages/nzbget/ScriptBase.py", line 135, in <module>
import six
ModuleNotFoundError: No module named 'six'
Script TidyIt.py with command DoTidy failed (terminated with unknown status)

๐Ÿ’ป Your System Details:

  • OS: Linux Debian-99-stretch-64-minimal 4.9.0-13-amd64 #1 SMP Debian 4.9.228-1 (2020-07-05) x86_64 GNU/Linux
  • Python Version: Python 2.7.13

๐Ÿ”ฎ Additional context
Add any other context about the problem here.

Command line mode is broken

the last update removed the nzbget directory and breaks the script.

this is the error I get:

Traceback (most recent call last):
File "TidyIt.py", line 279, in
from nzbget import SKIP_DIRECTORIES
ImportError: No module named nzbget

QQ: leave empty directories

So I'm loving the script but noticed that there's no way to leave empty directories, they get removed.
This makes SickRage upset, so I'm wondering if there's a way or mod to do this?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.