]> git.phdru.name Git - dotfiles.git/blob - bin/recode-filenames-recursive.py
Feat(recode-filenames-recursive): Allow to omit parameters
[dotfiles.git] / bin / recode-filenames-recursive.py
1 #! /usr/bin/env python3
2
3 import sys, os
4
5 from m_lib.defenc import default_encoding
6
7 if len(sys.argv) == 1:
8     src_encoding = default_encoding
9     if src_encoding == 'utf-8':
10         sys.exit("Usage: %s [[src_enc] dst_enc [start_dir]]" % sys.argv[0])
11     else:
12         dst_encoding = 'utf-8'
13     start_dir = '.'
14 elif len(sys.argv) == 2:
15     src_encoding = default_encoding
16     dst_encoding = sys.argv[1]
17     start_dir = '.'
18 elif len(sys.argv) == 3:
19     src_encoding = default_encoding
20     dst_encoding = sys.argv[1]
21     start_dir = sys.argv[2]
22 elif len(sys.argv) == 4:
23     src_encoding = sys.argv[1]
24     dst_encoding = sys.argv[2]
25     start_dir = sys.argv[3]
26 else:
27     sys.exit("Usage: %s [[src_enc] dst_enc [start_dir]]" % sys.argv[0])
28
29 # Fake for recode_filenames.py
30 sys.argv = ['', src_encoding, dst_encoding]
31 from recode_filenames import _recode
32
33
34 def _onerror(exc):
35     raise exc
36
37 plist = list(os.walk(start_dir, topdown=False, onerror=_onerror))
38
39
40 save_dir = os.getcwd()
41 for dirname, _subdirs, fnames in plist:
42     if dirname == '.':
43         continue
44     os.chdir(dirname)
45     for filename in fnames:
46         # if not exists - it was renamed already
47         if os.path.exists(filename) and \
48                 os.path.isfile(filename):
49             newname = _recode(filename)
50             if newname != filename:
51                 os.rename(filename, newname)
52     os.chdir('..')
53     dirname = os.path.basename(dirname)
54     newname = _recode(dirname)
55     if newname != dirname:
56         os.rename(dirname, newname)
57     os.chdir(save_dir)