]> git.phdru.name Git - dotfiles.git/blob - bin/recode_filenames.py
Feat(recode-filenames-recursive): Allow to omit parameters
[dotfiles.git] / bin / recode_filenames.py
1 #! /usr/bin/env python
2 # -*- coding: koi8-r -*-
3
4 import sys
5
6 src_encoding = sys.argv[1]
7 dst_encoding = sys.argv[2]
8
9 if src_encoding == "translit":
10    if dst_encoding == "koi8-r":
11       from m_lib.rus.lat2rus import lat2koi as _recode
12    elif dst_encoding == "cp1251":
13       from m_lib.rus.lat2rus import lat2win as _recode
14    else:
15       raise NotImplementedError("destination encoding must be koi8-r or cp1251, not `%s'" % dst_encoding)
16
17 elif dst_encoding == "translit":
18    if src_encoding == "koi8-r":
19       from m_lib.rus.rus2lat import koi2lat as _recode
20    elif src_encoding == "cp1251":
21       from m_lib.rus.rus2lat import win2lat as _recode
22    else:
23       raise NotImplementedError("source encoding must be koi8-r or cp1251, not `%s'" % src_encoding)
24
25    from m_lib.rus.rus2lat import koi2lat_d
26    koi2lat_d["Ъ"] = '' # remove apostrophs -
27    koi2lat_d["Ь"] = '' # they are not very good characters in filenames
28    koi2lat_d["ъ"] = '' # especially on Windoze
29    koi2lat_d["ь"] = '' # :-)
30
31 elif src_encoding == "url":
32    try:
33       src_encoding, dst_encoding = dst_encoding.split('/')
34    except ValueError:
35       src_encoding = dst_encoding
36    from m_lib.opstring import recode
37    import urllib
38    def _recode(s):
39       s = urllib.unquote(s)
40       if src_encoding != dst_encoding:
41          s = recode(s, src_encoding, dst_encoding, "replace")
42       return s
43
44 elif dst_encoding == "url":
45    try:
46       src_encoding, dst_encoding = src_encoding.split('/')
47    except ValueError:
48       dst_encoding = src_encoding
49    from m_lib.opstring import recode
50    import urllib
51    def _recode(s):
52       if src_encoding != dst_encoding:
53          s = recode(s, src_encoding, dst_encoding, "replace")
54       return urllib.quote(s, safe=";/?:@&=+$,()'") # wget treats them as safe
55
56 else:
57    from m_lib.opstring import recode
58    def _recode(s):
59       return recode(s, src_encoding, dst_encoding, "replace")
60
61
62 if __name__ == "__main__":
63    import os
64    for filename in sys.argv[3:]:
65       new_name = _recode(filename)
66       if new_name != filename:
67          os.rename(filename, new_name)