aleksandr Спасибо!
Да... видимо давно я не заглядывал в файловую систему в консоли. Теперь я понял о чем вы говорите.
Ранее я пытался решить вопрос имен файлов романизацией, но с ней мне было сложнее управлять шаблонами вики и я от нее отказался. Теперь решено 2 задачи за раз!
Предложенный руби-скрипт более не работает. В новых версиях руби нет модуля iconv (был удален еще в версии 1.9.3, текущая версия 2.7).
ВНИМАНИЕ!!! ВСЕ ЧТО НАПИСАНО ДАЛЕЕ ПОВТОРЯТЬ С БОЛЬШОЙ ОСТОРОЖНОСТЬЮ, ПРЕДВАРИТЕЛЬНО СДЕЛАВ РЕЗЕРВНУЮ КОПИЮ ВИКИ + СНАПШОТ ВМ + НА СВОЙ СТРАХ И РИСК!!!
Изменение fnencode с URL на UTF-8
- Поменять переменную fnencode на UTF-8: Управление -> Настройки вики -> Параметры "Докувики" -> Тонкая настройка -> Метод кодирования имён файлов, записанных не ASCII-символами: UTF-8
- Применить следующий bash скрипт
ВНИМАНИЕ!!! Необходимо указать СВОЙ абсолютный путь до каталога data
#!/bin/bash
# Абсолютный путь до каталога data
start_dir="/dokuwiki/data"
# Функция преобразования URL-кодировки
urldecode() { : "${*//+/ }"; echo -e "${_//%/\\x}"; }
# Получить массив имен файлов и каталогов
readarray -t array_name < <(find "$start_dir" | sort -r)
for name in "${array_name[@]}"
do
if [[ "$name" != '' ]]; then
# Получить директорию объекта
cut_count=`echo "$name" | tr / "\n" | wc -l`
cut_count=$((cut_count - 1))
obj_dir=`echo "$name" | cut -d / -f 1-"$cut_count"`
# Получить декодированное имя объекта
decode_name=`urldecode "$name"`
obj_name=`echo "$decode_name" | tr / "\n" | tail -n 1`
# Получить новый путь объекта
new_name="$obj_dir/$obj_name"
if [[ "$name" != "$new_name" ]]; then
# Переименовать объект
mv "$name" "$new_name"
fi
fi
done
У меня скрипт отработал за 5 минут (1.1к страниц, 10к ревизий, 5к мета историй... ужас...)
- После изменения всех имен файлов вики стала очень медленно открывать страницы, помогло перестроение индекса (плагин Searchindex Manager). Я конечно еще сегодня посадил ВМ вики на отдельное ядро гипервизора, но по моему после смены fnencode на UTF-8 она стала работать шустрее...