Быстрое решение Python, которое только один раз просматривает дерево исходных файлов
Так как я не мог найти удовлетворительного -существующего решения, я решил сделать быстрый скрипт Python для его реализации.
В частности, этот метод эффективен, потому что он просматривает дерево исходных файлов только один раз снизу вверх.
Это также позволит вам быстро настроить такие вещи, как перезапись файлов, по своему вкусу.
Использование:
move-merge-dirs src/ dest/
переместит все содержимое src/*
в dest/
, а src/
исчезнет.
переместить -объединить -каталоги
#!/usr/bin/env python3
import argparse
import os
def move_merge_dirs(source_root, dest_root):
for path, dirs, files in os.walk(source_root, topdown=False):
dest_dir = os.path.join(
dest_root,
os.path.relpath(path, source_root)
)
if not os.path.exists(dest_dir):
os.makedirs(dest_dir)
for filename in files:
os.rename(
os.path.join(path, filename),
os.path.join(dest_dir, filename)
)
for dirname in dirs:
os.rmdir(os.path.join(path, dirname))
os.rmdir(source_root)
if __name__ == '__main__':
parser = argparse.ArgumentParser(
description='Move merge src/* into dest. Overwrite existing files.'
)
parser.add_argument('src_dir')
parser.add_argument('dest_dir')
args = parser.parse_args()
move_merge_dirs(args.src_dir, args.dest_dir)
Протестировано на Python 3.7, Ubuntu 18.04.
file
лучше в двоичных файлах, uchardet
лучше в текстовых файлах. Например файл не знает Windows -1250.
file
является хорошим инструментом для идентификации или, скорее, предположения о кодировке .
Вы можете использоватьiconv
для изменения кодировки. Полный ответ.
iconv -f ISO-8859-15 -t UTF-8 < input.txt > output.txt