Rename by Reference
Another specialized tool for a specialized task, this Python script renames files in a directory based on names from another directory. The pattern matching is only based on matching substrings. If a filename fits as a substring within another filename from the reference directory, then that reference filename is selected as a possible choice. Filename extensions are excluded automatically.
Take a look:
#!/usr/bin/python import os import glob def rename_by_reference(target_dir, ref_dir): ref = dict() for f in glob.glob(os.path.join(ref_dir, "*")): if os.path.isdir(f): (name, ext) = (os.path.basename(f), "") else: (name, ext) = os.path.splitext(os.path.basename(f)) ref[name] = ext for f in glob.glob(os.path.join(target_dir, "*")): if os.path.isdir(f): (name, ext) = (os.path.basename(f), "") else: (name, ext) = os.path.splitext(os.path.basename(f)) for (ref_name, ref_ext) in ref.iteritems(): if name == ref_name: continue # Equal, not interesting... if name in ref_name: print name + ext, "--->", ref_name + ext answer = raw_input("Rename? ").lower() if answer.startswith("q"): return elif answer.startswith("y"): src = f dst = os.path.join(os.path.dirname(f), ref_name + ext) os.rename(src, dst) break if __name__ == "__main__": import sys if len(sys.argv) < 3: print "Usage: %s <target dir> <reference dir>" % (sys.argv[0]) sys.exit(1) rename_by_reference(sys.argv[1], sys.argv[2]) sys.exit(0)