X-Git-Url: https://git.phdru.name/?p=dotfiles.git;a=blobdiff_plain;f=bin%2Frecode-filenames-recursive.py;h=186d5001370155bc46a9778e835ab368f1112cfe;hp=9afd6c7a361dd9cc24c13edf58a96b43aba8c2e3;hb=HEAD;hpb=c5883d2a782366c0a3468a989e756cf37dabbd46 diff --git a/bin/recode-filenames-recursive.py b/bin/recode-filenames-recursive.py index 9afd6c7..5408563 100755 --- a/bin/recode-filenames-recursive.py +++ b/bin/recode-filenames-recursive.py @@ -1,39 +1,57 @@ -#! /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)