Иногда я должен искать файлы с символами с диакритикой (диакритический знак в целом), обычно с locate/mlocate. Я хочу установить (возможно, в /etc/updatedb.conf
) таким образом, это позволило мне искать этот специальные символы с помощью определенного отображения языка, например:
a == âàáäÂÀÂÄ
e == êèéëÊÈÉË
i == îïíÎÏ
o == ôöóÔÖ
u == ûùüÛÜÙ
c == çÇ
n == ñ
Так locate -i liberación
также поиск файлов со строкой liberacion и даже liberaciòn.
find
mlocate
разработчик), говорят здесь, что официальный исходный код находится на pagure.io (и ветвление на GitHub).-t
/--transliterate
использование поддержки iconv
соответствовать акцентируемый.mlocate
с поддержкой --transliterate
теперь включен в Ubuntu 18.04 LTS Бионический Бобр (v2 и v3.1).Теперь с mlocate 0.26 мы имеем -t --transliterate
опция (см. страницу справочника) на Ubuntu 18.04 + (без потребности нечетных обходных решений):
Создание некоторых тестовых файлов:
$ touch liberación liberacion liberaciôn
Обновление и поиск:
$ updatedb
$ locate --transliterate liberacion
/home/pablo/liberacion
/home/pablo/liberación
/home/pablo/liberaciôn
Так теперь locate -t liberación
также поиск файлов со строкой liberacion
и даже liberaciòn
!
Наконец, создавая псевдоним на моем .bashrc :-)
$ alias locate="locate --transliterate"
Если мы будем смотреть на updatedb.conf(5)
, то мы найдем, что существует не очень, мы можем сделать с элементами конфигурации.
, Таким образом, мы собираемся записать сценарий с помощью locate
; В конце мы можем выполнить что-то как my-locate.sh liberacion
или my-locate.sh liberâciòn
, и он будет приносить нам все возможные комбинации.
Первый, создают простой файл как нашу базу данных где угодно, Вы хотите, чтобы она была, например: ~/.mydb
; затем добавьте свои символы диакритических знаков в тот файл как это:
aâàáäÂÀÂÄ
eêèéëÊÈÉË
iîïíÎÏ
uûùüÛÜÙ
cçÇ
oôöóÔÖóòòò
...
...
Затем нам нужен маленький сценарий, который делает задание для нас, я записал простой:
#!/bin/bash
# Final search term
STR=""
# Loop throughout all characters of desired string
for (( i=0; i<${#1}; i++ )); do
# Split the string in one char
CH="${1:$i:1}"
# Find all possible combinations of this char
CHARS=$(grep "$CH" ~/.mydb)
# Add an "or" operator between characters
REG=$(echo "$CHARS" | sed 's/.\{1\}/&\|/g' )
REG="($REG)"
# Append all possible combination of this character
# to our final search term as an or statement
if [ "$REG" == '()' ];
then
STR=$STR$CH
else
STR=$STR$REG
fi
done
# locate it using regex
locate --regex "$STR$"
Теперь сохраняют его где-нибудь в Вашем ПУТИ с желаемым именем, например: в ~/bin
. Это уже должно быть в Вашей среде ПУТИ.
, в конце концов, просто использование что-то вроде этого для поиска всех возможных комбинаций.
my-locate.sh liberacion
найдет для меня все их:
~/lab/liberacion
~/lab/liberaciòn
~/lab/liberación
~/lab/liberâciòn
~/lab/liberäciòn
~/lab/libÈrâciòn