LINUX.ORG.RU
решено ФорумGames

Как менять регистр при разорхивации?

 , ,


1

1

С наступающим, линукс-геймеры. После установки модов на Morrowind, всё превратилось в розовое месево. Посмотрев на это, я понял, что это из-за того, что оригинальные файлы игры названы капсом, а модифицированные нет. В Windows файловая система не чувствительна к регистру, поэтому при распаковке файлов, они автоматически заменяются. А я не могу выискивать три сотни конфликтующих файлов. Может есть архиваторы с нужной функцией или утилиты?


У ext4 есть фича включения нечувствительности к регистру. Но лично проще было тупо моды устанавливать под Wine. Играть один хрен под Wine всё равно.

Как вариант, можно всё переименовывать в нижний регистр. Потом распаковывать мод отдельно, тоже переименовывать в нижний регистр, затем перемещать в каталог с игрой, с заменой файлов.

Но с Wine самый простой вариант.

CrX ★★★★★
()
Последнее исправление: CrX (всего исправлений: 1)
Ответ на: комментарий от CrX

Играть один хрен под Wine

Там вообще-то openmw в тегах стоит.

По сабжу:

переименовывает все файлы рекурсивно от текущего каталога в нижний регистр с заменой существующих файлов в нижнем регистре если существуют. (при замене будут созадны бекапы вида filename.ext~1~)

find . -type f -exec bash -c 't={}; [ "$t" = "${t,,}" ] || mv --backup=numbered "$t" "${t,,}"' \;
Tanger ★★★★★
()
Последнее исправление: Tanger (всего исправлений: 1)
Ответ на: комментарий от anonymous

Они же сами признаются, что без Morrowind Optimisation Patch and Project Atlas его длинной палкой трогать не стоит. Потом представь что будет, если его модами на графоний обмазать.

anonymous
()
Ответ на: комментарий от Tanger

Работает не на все файлы. Часть меняет название, другая нет. При повторном прогоне ничего не меняется и выводит это:

bash: строка 1: ELF_F_HAIR_12.NIF: команда не найдена
bash: строка 1: ELF_M_HAIR_02.NIF: команда не найдена
bash: строка 1: ELF_F_HAIR_03.NIF: команда не найдена
bash: строка 1: ELF_F_KNEE.NIF: команда не найдена
bash: строка 1: ELF_M_HAIR_04.NIF: команда не найдена
bash: строка 1: ELF_M_NECK.NIF: команда не найдена
bash: строка 1: ELF_M_HEAD_06.NIF: команда не найдена

не весь вывод, но файлов с таким именем в папке нет и не было.

kllk
() автор топика
Ответ на: комментарий от kllk

Да, понял что так как написал вообще работать не будет. Если в названии директории будут большие буквы - рекурсивное переименование в ней сломается.

Вот скрипт на питоне, который переименовывает рекурсивно файлы и директории.

import os

def backup(dir, file, simulate):
    i = 1
    while os.path.exists(os.path.join(dir, f"{file}.bak{i}")):
        i = i + 1
    oldpath, newpath = (os.path.join(dir, file), os.path.join(dir, f"{file}.bak{i}"))
    print(f"backup: mv {oldpath} {newpath}")
    if not simulate:
        os.rename(oldpath, newpath)

def rename(dir, file, simulate):
    new_file_name=file.lower()
    if file != new_file_name:
        new_path = os.path.join(dir, new_file_name)
        if os.path.exists(new_path):
            backup(dir, new_file_name, simulate)
        oldpath = os.path.join(dir, file)
        print(f"mv {oldpath} {new_path}")
        if not simulate:
            os.rename(oldpath, new_path)

def walk(simulate = False):
    for d in reversed(list(os.walk("."))):
        for f in d[2]:
            rename(d[0], f, simulate)
        for f in d[1]:
            rename(d[0], f, simulate)

walk(simulate = True)

Выведет порядок действий без реального перемещения. Чтобы было реальное - надо в последней строке True на False заменить.

Tanger ★★★★★
()