使用“locate”命令搜索变音符号/重音字符

Pab*_*chi 8 command-line search find locate

有时我需要搜索带有重音字符(一般是变音符号)的文件,通常使用 locate/mlocate。我希望设置(可能在/etc/updatedb.conf),以便我使用某种语言映射来搜索这个特殊字符,例如:

a == âàáäÂÀÂÄ
e == êèéëÊÈÉË
i == îïíÎÏ
o == ôöóÔÖ
u == ûùüÛÜÙ
c == çÇ
n == ñ
Run Code Online (Sandbox Code Playgroud)

因此locate -i liberación也应该使用字符串liberaciòn甚至liberaciòn搜索文件名。

注释和假设

  • 也许其他人:ÂÃÄÀÁÅÆ ÇÈÉÊËÌÍÎÏ ÐÑÒÓÔÕÖØÙÚÛÜÝÞ ßàáâããäåæç èéêëìíîïðñòóôõö øùúûüýþÿ .
  • 这是西班牙语、法语和德语等浪漫语言的常见情况。
  • 我总是使用 100% UTF-8 语言环境。
  • 我宁愿不必使用正则表达式。
  • 补丁可能会像Unidecode / cUnidecode一样使用 Unicode 的 ASCII 音译。大部分 mlocate 是用 C 编写的。

有关的

Pab*_*chi 2

移动定位

\n

现在,使用mlocate 0.26,我们可以在 Ubuntu 18.04+ 上-t --transliterate选择(参见手册页)(无需解决方法):

\n

创建一些测试文件:

\n
$ touch liberaci\xc3\xb3n liberacion liberaci\xc3\xb4n\n
Run Code Online (Sandbox Code Playgroud)\n

更新和搜索:

\n
$ updatedb\n$ locate --transliterate liberacion \n/home/pablo/liberacion\n/home/pablo/liberaci\xc3\xb3n\n/home/pablo/liberaci\xc3\xb4n\n
Run Code Online (Sandbox Code Playgroud)\n

所以现在locate -t liberaci\xc3\xb3n还要搜索带有字符串的文件liberacion,甚至liberaci\xc3\xb2n

\n

最后,创建一个别名...:-)

\n
$ touch liberaci\xc3\xb3n liberacion liberaci\xc3\xb4n\n
Run Code Online (Sandbox Code Playgroud)\n

定位

\n

plocate:是一个更快的定位,索引但没有--transliterate选择,并且不会很快有,正如其唯一维护者(Steinar Gunderson)所说:

\n
\n

不幸的是,这非常重要。mlocate 可以摆脱它,因为它线性扫描每个文件名;plocate 则不然,这就是为什么它比 mlocate 快得多,但也使这种与语言环境相关的搜索变得更加困难。所以,不幸的是,这不太可能很快发生。

\n
\n

我找不到与该项目相关的问题跟踪器。

\n

然而它确实如此--regex,因此内部似乎可以使用与Ravexina 的方法类似的方法。

\n

在发行版上,plocate默认情况下我将其删除,安装了 mlocate 并保留它,因此不会被 plocate 替换:

\n
$ updatedb\n$ locate --transliterate liberacion \n/home/pablo/liberacion\n/home/pablo/liberaci\xc3\xb3n\n/home/pablo/liberaci\xc3\xb4n\n
Run Code Online (Sandbox Code Playgroud)\n