-#! /usr/bin/env python
+#! /usr/bin/env python3
import sys, os
-if len(sys.argv) == 3:
- start_dir = '.'
+from m_lib.defenc import default_encoding
+
+if len(sys.argv) == 1:
+ src_encoding = default_encoding
+ if src_encoding == 'utf-8':
+ sys.exit("Usage: %s [[src_enc] dst_enc [start_dir]]" % sys.argv[0])
+ else:
+ dst_encoding = 'utf-8'
+ start_dir = '.'
+elif len(sys.argv) == 2:
+ src_encoding = default_encoding
+ dst_encoding = sys.argv[1]
+ start_dir = '.'
+elif len(sys.argv) == 3:
+ src_encoding = default_encoding
+ dst_encoding = sys.argv[1]
+ start_dir = sys.argv[2]
elif len(sys.argv) == 4:
- start_dir = sys.argv[3]
+ src_encoding = sys.argv[1]
+ dst_encoding = sys.argv[2]
+ start_dir = sys.argv[3]
else:
- sys.exit("Usage: %s src_enc dst_enc [start_dir]" % sys.argv[0])
+ sys.exit("Usage: %s [[src_enc] dst_enc [start_dir]]" % sys.argv[0])
-
-def _p(plist, dirname, names):
- plist.append((dirname, names))
+# Fake for recode_filenames.py
+sys.argv = ['', src_encoding, dst_encoding]
+from recode_filenames import _recode
-plist = []
-os.path.walk(start_dir, _p, plist)
-plist.reverse()
+def _onerror(exc):
+ raise exc
+plist = list(os.walk(start_dir, topdown=False, onerror=_onerror))
-from recode_filenames import _recode
save_dir = os.getcwd()
-for dirname, names in plist:
- os.chdir(dirname)
- for filename in names:
- # if not exists - it was renamed already
- if os.path.exists(filename) and \
- os.path.isfile(filename):
- newname = _recode(filename)
- if newname <> filename:
- os.rename(filename, newname)
- os.chdir('..')
- dirname = os.path.basename(dirname)
- newname = _recode(dirname)
- if newname <> dirname:
- os.rename(dirname, newname)
- os.chdir(save_dir)
+for dirname, _subdirs, fnames in plist:
+ if dirname == '.':
+ continue
+ os.chdir(dirname)
+ for filename in fnames:
+ # if not exists - it was renamed already
+ if os.path.exists(filename) and \
+ os.path.isfile(filename):
+ newname = _recode(filename)
+ if newname != filename:
+ os.rename(filename, newname)
+ os.chdir('..')
+ dirname = os.path.basename(dirname)
+ newname = _recode(dirname)
+ if newname != dirname:
+ os.rename(dirname, newname)
+ os.chdir(save_dir)