Move2folder script
Added a script to organize comics in a folder tree by Publisher/Series (Volume).
This commit is contained in:
parent
5574280ad6
commit
a6282b5449
113
scripts/move2folder.py
Executable file
113
scripts/move2folder.py
Executable file
@ -0,0 +1,113 @@
|
||||
#!/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.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
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:
|
||||
series_name = md.series
|
||||
publisher_name = md.publisher
|
||||
start_year = md.volume
|
||||
if series_name is not None:
|
||||
# some tweaks to keep various filesystems happy
|
||||
series_name = series_name.replace(":", " -")
|
||||
series_name = series_name.replace("/", "-")
|
||||
series_name = series_name.replace("?", "")
|
||||
series_folder = os.path.join(tree_root, unicode(publisher_name), unicode(series_name) + " (" + unicode(start_year) + ")")
|
||||
make_folder( series_folder )
|
||||
move_file( filename, os.path.join(series_folder, os.path.basename(filename)) )
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
Loading…
Reference in New Issue
Block a user