I wanted to build a directory of symlinks that pointed to my MythTV recordings, so I wrote a little python script to do it for me. I figure someone else might find this useful too…
#!/usr/bin/python # Copyright (C) Michael Still (mikal@stillhq.com) 2007 # Released under the terms of the GNU GPL import MySQLdb import os import re from socket import gethostname # Connect to the MythTV database based on the MythTV config config_values = {} home = os.environ.get('HOME') config = open(home + '/.mythtv/mysql.txt') for line in config.readlines(): if not line.startswith('#') and len(line) > 5: (key, value) = line.rstrip('\n').split('=') config_values[key] = value db_connection = MySQLdb.connect(host = config_values['DBHostName'], user = config_values['DBUserName'], passwd = config_values['DBPassword'], db = config_values['DBName']) cursor = db_connection.cursor(MySQLdb.cursors.DictCursor) # Regexp for what is allowed in the symlink name unsafe = re.compile('[^a-zA-Z0-9\-\:_]+') # Find the recordings directory -- this assumes you haven't used an # identifier string for this machine... cursor.execute('select * from settings where value="RecordFilePrefix" and ' 'hostname="%s";' % gethostname()) row = cursor.fetchone() basedir = row['data'] # Now find all the recordings we have at the moment cursor.execute('select title, subtitle, starttime, basename from recorded;') for i in range(cursor.rowcount): row = cursor.fetchone() title = row['title'] subtitle = row['subtitle'] if subtitle == '': subtitle = str(row['starttime']) title = title.replace(' ', '_') title = unsafe.sub('', title) subtitle = subtitle.replace(' ', '_') subtitle = unsafe.sub('', subtitle) extn = row['basename'].split('.')[1] try: os.mkdir(title) except: pass try: os.symlink('%s/%s' %(basedir, row['basename']), '%s/%s.%s' %(title, subtitle, extn)) except: pass
This creates a tree of symlinks in the current directory that looks like this:
$ find . -type l ./Masterminds/Air_America ./Tech_Now/Getting_Famous ./Babar/To_Tell_or_Not_to_Tell ./Babar/The_Intruder ./Babar/Special_Delivery ./Babar/Conga_the_Terrible ./Babar/The_Celestville_Enquirer ./The_Backyardigans/Viking_Voyage ./The_Backyardigans/Cops_and_Robots ./The_Backyardigans/Eureka ./The_Backyardigans/Movers_of_Arabia ./The_Backyardigans/Save_the_Day ./Go_Diego_Go/Rainforest_Race ./Go_Diego_Go/Cool_Water_for_Ana_the_Anaconda ./Go_Diego_Go/Great_Jaguar_to_the_Rescue ./Go_Diego_Go/Diego_Saves_the_River_Dolphin ./Go_Diego_Go/Jorge_the_Little_Hawk_Learns_to_Migrate ./How_Its_Made/2007-06-08_09:30:00