]> git.phdru.name Git - dotfiles.git/blobdiff - bin/recode-filenames-recursive.py
Feat(recode-filenames-recursive): Allow to omit parameters
[dotfiles.git] / bin / recode-filenames-recursive.py
index 9afd6c7a361dd9cc24c13edf58a96b43aba8c2e3..54085636506bf1f642663a8fc5697541a762935b 100755 (executable)
@@ -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)