時々、アクセント付き文字(一般的には発音区別符号)を使用して、通常はロケート/ mlocateでファイルを検索する必要があります。特定の言語マッピングを使用してこの特殊文字を検索できるようにセットアップする(おそらく/etc/updatedb.conf
で)したい:
a == âàáäÂÀÂÄ
e == êèéëÊÈÉË
i == îïíÎÏ
o == ôöóÔÖ
u == ûùüÛÜÙ
c == çÇ
n == ñ
したがって、locate -i liberación
は、文字列liberacionおよび偶数liberaciònを持つファイルも検索します。
find
を使用mlocate
開発者) ここに言う 公式 ソースコードはpagure.ioにあります (および Githubのフォーク ) 。iconv
を使用してアクセント付きの一致をサポートする-t
/--transliterate
サポートを追加します。--transliterate
をサポートするmlocate
がUbuntu 18.04 LTS Bionic Beaverに含まれるようになりました( v2 および v3.1 )。Mlocate 0.26では、Ubuntu 18.04+に-t --transliterate
オプション( manページ を参照)があります(奇妙な回避策は不要です):
テストファイルの作成:
$ touch liberación liberacion liberaciôn
更新と検索:
$ updatedb
$ locate --transliterate liberacion
/home/pablo/liberacion
/home/pablo/liberación
/home/pablo/liberaciôn
したがって、now 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$"
希望する名前でPATHのどこかに保存します(例:~/bin
)。 PATH環境に既にあるはずです。
結局のところ、このようなものを使用して、可能なすべての組み合わせを検索するだけです。
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