![]() |
Total Commander Как осуществить групповую транслитерацию по списку из файла?
Добрый день, есть следующая ситуация:
Сетевая шара переезжает с десктопной машины Windows на линуксовое сетевое хранилище. В старой сетевой шаре по разным каталогами разбросано примерно 300 файлов названия которых в основном состоят из одной кириллицы, с количеством символов от 128 до 255. Проблема заключается в том, что сетевое хранилище их принять откажется, потому что имя файла в ext4/btrfs должно содержать не большее 255 байт. А символ кириллицы в UTF-8 занимает 2 байта. С помощью плагина fileX для Total Commander был получен весь список файлов которые нужно переименовать. Был найден плагин (wdx_Translit), который упрощает групповую автозамену, делает процесс практически автоматическим. Но осталось решить один вопрос: как переименовывать файлы не по выделению а по списку в файле? Потому что переименовывать десятки тысяч файлов не нужно, а цеплять нужные из разных папок в GUI очень муторно. Нужно как-то скормить список. Если это решается через Bat, Powershell, Far либо любым другим способом из под винды, пожалуйста, все равно дайте знать. |
Цитата:
Только необходимы уточнения... примеры из листинга (в наличии ли там полные пути к файлам?), кодировка самого файла-списка. Что требуется в итоге? Транслитерация или простое обрезание наименования? |
YuS_2,
1. Условный пример: пути выглядят так: \\Michsh-pc\d\тест\авып впы 112434125 dfgfd.txt \\Michsh-pc\d\тест\авып впы 112434125 dfgfd — копия.txt \\Michsh-pc\d\тест\авып впы 112434125 dfgfd — копия (2).txt Только в реальности шара идет через IP-адрес а не доменное имя. 2. Список сохранен в UTF-8 3. Боюсь, требуется именно транслитерация как самый компромиссный вариант. Благодарю! --- Пока прошу подождать с решением. Сейчас будет уточняться нужна транслитерация или обрезка имени. |
Цитата:
script.ps1
Код:
function translit { |
YuS_2, прощу прощения, что не успел Вас предупредить раньше. Спасибо большое за помощь.
|
YuS_2, скажите, пожалуйста, а у вас есть возможность показать решение через скрипт?
Если да, то заодно интересно, а что будет происходить с файлами, если после обрезки их названия станут одинаковыми? |
Цитата:
Скрипт приведен выше... скрипту нужны только данные из файла-списка. Ну и естественно, права доступа, иначе переименовать не получиться. Цитата:
|
YuS_2, простите голова кругом пошла.
Я имел ввиду можете ли вы показать, как будет выглядеть скрипт на обрезание файлов? В прочем, пока текущее ТЗ "плавает" я нашел способ сделать это через Total Commander. Чуть позже я выложу решение без использования скрипта, но и без самого списка с файлами. Так как нашел как вынести все найденные по критерию файлы на панель в самом Total Commander. Это была моя ошибка связанная с нехваткой опыта и недостаточной внимательностью в работе с ним. Еще раз, благодарю вас за помощь) |
Цитата:
В данном случае, Вы задали правильный вопрос про обрезание наименований файлов, но ответ на него, должен исходить от Вас же... В общем, скрипта готового нет, но он не сложен по написанию и по структуре, при этом сильно будет зависеть, как раз, от предполагаемых, необходимых действий. |
Как решить данный вопрос, НЕ используя файл со списком.
Для работы нужны плагины: FileX и wdx_Translit. 1. Установите плагины, добавив их в настройках Total Commander. 2. Выделите путь в Total Commander, зажать Backspace, чтобы появилась возможность ввести путь до сетевой шары вручную (либо, если шара подключена как объект, выберите ее из списка). 3. Выберите поиск файлов: 4. В качестве фильтра выберите FileX, выберите параметр длина имени, и укажите условие, что длина превышает 127 символов (если имя файла будет состоять, только из одной кириллицы без пробелов, то длина в 128 символов будет равна 256 байт для кодировки UTF-8) 5. Выберите после произведенного поиска - файлы на панель 6. После чего выделите нужные файлы и выберите групповое переименование. 7. Далее вы можете их как обрезать так и транслитировать: YuS_2, я Вас понял. Вы мне сильно помогли. Также только что я выложил альтернативный способ решить вопрос, до которого добрался. Надеюсь, Ваш скрипт или моя инструкция поможет не только мне но и другим пользователям. |
Цитата:
michsh@vk, а если файлы будут в разных каталогах — проверьте, отработает ли приведённый Вами алгоритм. |
Iska, Это работает для разных каталогов и их подуровней (даже если имена между файлами из разных папок совпадают: в моем случае они были созданы копипастой), при условии, что у них общий корень (т.е. шара, метка диска, либо общая директория), но вроде в Total Commander искать файлы и нельзя иначе. В маске счетчик используется для того, чтобы после обрезки избежать такой ситуации, в которой у одной папки могут оказаться файлы с одним и тем же именем. К сожалению, я не знаю, можно ли настроить счетчик так, чтобы он распространялся только на дубли.
В качестве тестирования использовались 3 папки тест. В них было еще по одной папке, а там еще по одной. На каждом уровне были свои файлы. P.S. Спасибо за правку. Изменение добавил. P.S.S. Поиск осуществлялся через корень шары, который эквивалентен корню диска. P.S.S.S. Также хотел бы добавить, что в своем частном случае я обнаружил баг. При повторном поиске, плагин fileX отрабатывает некорректно. Фильтр следует удалить и добавить заново с теми же условиями. |
michsh@vk, спасибо, ясно.
|
Время: 20:06. |
Время: 20:06.
© OSzone.net 2001-