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搜索文件名。
find
mlocate
开发人员)在这里说官方源代码在 pagure.io(和Github 上的一个分支)。-t
/--transliterate
支持iconv
用于匹配重音。mlocate
支持--transliterate
Ubuntu 18.04 LTS Bionic Beaver(v2和v3.1)。现在,使用mlocate 0.26,我们可以在 Ubuntu 18.04+ 上-t --transliterate
选择(参见手册页)(无需解决方法):
创建一些测试文件:
\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$ touch liberaci\xc3\xb3n liberacion liberaci\xc3\xb4n\n
Run Code Online (Sandbox Code Playgroud)\nplocate:是一个更快的定位,索引更小。但没有--transliterate
选择,并且不会很快有,正如其唯一维护者(Steinar Gunderson)所说:
\n\n不幸的是,这非常重要。mlocate 可以摆脱它,因为它线性扫描每个文件名;plocate 则不然,这就是为什么它比 mlocate 快得多,但也使这种与语言环境相关的搜索变得更加困难。所以,不幸的是,这不太可能很快发生。
\n
我找不到与该项目相关的问题跟踪器。
\n然而它确实如此--regex
,因此内部似乎可以使用与Ravexina 的方法类似的方法。
在发行版上,plocate
默认情况下我将其删除,安装了 mlocate 并保留它,因此不会被 plocate 替换:
$ 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