#!/usr/bin/env python # Convert filenames in the given directories recursively between character # sets. Usage: # transcode-filenames [-f FROM-CHARSET] [-t TO-CHARSET] [-n] dir [dir ...] # The default is ISO-8859-1 to UTF-8. # -n shows the renames it would perform rather than doing them. import os, os.path, stat, sys, getopt def transcode_dir(d, from_set, to_set, dummy): fs = os.listdir(d) for f in fs: old_name = os.path.join(d, f) st = os.stat(old_name) if stat.S_ISDIR(st.st_mode): transcode_dir(old_name, from_set, to_set, dummy) nf = f.decode(from_set).encode(to_set) new_name = os.path.join(d, nf) if dummy: print repr(old_name), "->", repr(new_name) else: os.rename(old_name, new_name) if __name__ == "__main__": from_set = "ISO-8859-1" to_set = "UTF-8" dummy = False try: opts, args = getopt.getopt(sys.argv[1:], "f:t:n") except getopt.GetoptError, s: print s sys.exit(1) for o, a in opts: if o == "-f": from_set = a elif o == "-t": to_set = a elif o == "-n": dummy = True for d in args: transcode_dir(d, from_set, to_set, dummy)