Organize comics into folders -- script

View previous topic View next topic Go down

Organize comics into folders -- script

Post  FCanc on Sat Jan 10, 2015 9:35 am

I think this will make a few users happy...

I made a script, based on the one that makes a folder tree full of links to comics, so that it moves the files instead. It works on Mac OS X 10.10 and I believe in all the other Unix environments, but I can't guarantee.
I organize my comics by Publisher/Series (Volume/StartYear) so that's the folder structure made by this script, but you can easily modify it to suit your needs. Of course files with no metadata will not move.

Usage:
Code:
ComicTagger -S path/to/move2folder.py path/to/your/comics /path/to/your/organized/comics

Here's the script, save it to a file and name it move2folder.py
Code:
#!/usr/bin/python
"""
Moves comic files based on metadata organizing in a tree by Publisher/Series (Volume)
"""

"""
This script is based on make_links.py by Anthony Beville

Copyright 2015  Fabio Cancedda, Anthony Beville

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
"""

import sys
import os
import platform
import shutil

from comictaggerlib.comicarchive import *
from comictaggerlib.settings import *
from comictaggerlib.issuestring import *
import comictaggerlib.utils

def make_folder( folder ):
   if not os.path.exists( folder ):
      try:
         os.makedirs(folder)
      except Exception as e:
         print "{0} Can't make {1} -- quitting".format(e, folder)
         quit()
         
def move_file( source, filename ):
   if not os.path.exists( filename ):
      shutil.move( os.path.abspath(source) , filename )

def main():
   utils.fix_output_encoding()
   settings = ComicTaggerSettings()

   style = MetaDataStyle.CIX

   if platform.system() == "Windows":
      print >> sys.stderr, "Sorry, this script works only on UNIX systems"
      
   if len(sys.argv) < 3:
      print >> sys.stderr, "usage: ¬†{0} comic_root tree_root".format(sys.argv[0])
      return
   
   comic_root = sys.argv[1]
   tree_root = sys.argv[2]
   
   print "Root is : ", comic_root
   if not os.path.exists( comic_root ):
      print >> sys.stderr, "The comic root doesn't seem a directory or it doesn't exists. -- quitting"
      return
   
   filelist = utils.get_recursive_filelist( [ comic_root ] )
      
   if len(filelist) == 0:
      print >> sys.stderr, "The comic root seems empty. -- quitting"
      return
      
   make_folder( tree_root )
      
   #first find all comics with metadata
   print "Reading in all comics..."
   comic_list = []
   max_name_len = 2
   for filename in filelist:
      ca = ComicArchive(filename, settings.rar_exe_path )
      if ca.seemsToBeAComicArchive() and ca.hasMetadata( style ):

         comic_list.append((filename, ca.readMetadata( style )))
         
         max_name_len = max ( max_name_len, len(filename))
         fmt_str = u"{{0:{0}}}".format(max_name_len)
         print >> sys.stderr, fmt_str.format( filename ) + "\r",
         sys.stderr.flush()

   print >> sys.stderr, fmt_str.format( "" )

   print "Found {0} tagged comics.".format( len(comic_list))

   # walk through the comic list and moves each one   
   for filename, md in comic_list:
      print >> sys.stderr, fmt_str.format( filename ) + "\r",
      sys.stderr.flush()
      
      #do publisher/series organizing:
      fixed_series_name = md.series
      if fixed_series_name is not None:
         # some tweaks to keep various filesystems happy
         fixed_series_name = fixed_series_name.replace(":", " -")
         fixed_series_name = fixed_series_name.replace("/", "-")
         fixed_series_name = fixed_series_name.replace("?", "")
      series_folder = os.path.join(tree_root, str(md.publisher), unicode(fixed_series_name) + " (" + str(md.volume) + ")")
      make_folder( series_folder )
      move_file( filename, os.path.join(series_folder, os.path.basename(filename)) )
      
if __name__ == '__main__':
   main()

FCanc

Posts : 6
Join date : 2015-01-10

View user profile

Back to top Go down

Re: Organize comics into folders -- script

Post  FCanc on Sat Jan 10, 2015 9:39 am

Un fortunately I had do remove the link to the Apache license in the script comment, due to forum restrictions to new users... I'll put it back in 7 days

FCanc

Posts : 6
Join date : 2015-01-10

View user profile

Back to top Go down

Re: Organize comics into folders -- script

Post  xnowimcoolx on Sun Jun 21, 2015 4:27 am

this is awesome!! Thanks for sharing!! I had become very lazy organizing my comics, and this did it in a matter of seconds. It works fine with Mac OS 10.8 too.

xnowimcoolx

Posts : 1
Join date : 2015-06-21

View user profile

Back to top Go down

Re: Organize comics into folders -- script

Post  Sponsored content


Sponsored content


Back to top Go down

View previous topic View next topic Back to top

- Similar topics

 
Permissions in this forum:
You cannot reply to topics in this forum