#!/usr/bin/python # Joe Gillotti - 3/16/2014 import os import re import glob import sys quiet = '-s' in sys.argv torrents = '/srv/media/torrents' movies = '/srv/media/public/Movies' inodes = set(os.stat(f).st_ino for f in glob.glob(os.path.join(movies, '*'))) for root, dirs, files in os.walk(torrents): for fn in files: source = os.path.join(root, fn) dest = os.path.join(movies, fn) if source.lower().split('.')[-1] not in ('avi', 'mp4', 'mkv', 'mpg', 'm4v'): continue if re.search('s\d\de\d\d', fn, re.I): if not quiet: print 'skipping tv show {0}'.format(fn) continue if re.search('(trailer|scene)', fn.lower(), re.I): if not quiet: print 'skipping possible extra stuff {0}'.format(fn) continue try: inode = os.stat(source).st_ino except OSError as e: if not quiet: print 'Couldnt get stat on {0}: {1}'.format(fn, e) continue if inode in inodes: if not quiet: print 'skipping already linked inode {0}'.format(fn) continue if os.path.exists(dest): if not quiet: print 'skipping already linked path {0}'.format(fn) continue try: os.link(source, dest) except OSError as e: print 'Failed linking {0} -> {1}: {2}'.format(source, dest, e) continue print 'Linked {0}'.format(fn)