![以不区分大小写的方式查询包数据库的方法?](https://linux22.com/image/823064/%E4%BB%A5%E4%B8%8D%E5%8C%BA%E5%88%86%E5%A4%A7%E5%B0%8F%E5%86%99%E7%9A%84%E6%96%B9%E5%BC%8F%E6%9F%A5%E8%AF%A2%E5%8C%85%E6%95%B0%E6%8D%AE%E5%BA%93%E7%9A%84%E6%96%B9%E6%B3%95%EF%BC%9F.png)
我有一个文件的名称,我需要确定哪个包提供了它。如果我不需要执行不区分大小写的搜索,那么以下命令就可以正常工作:
dpkg -S filename.txt
如果文件名为“filename.txt”,则此方法有效,但如果文件名为“Filename.txt”,则方法无效。
咨询命令手册dpkg
页没有透露有关该命令不区分大小写的选项的任何信息,我被蒙在鼓里。
是有没有办法以不区分大小写的方式查询包数据库中的某个文件?
答案1
dpkg
接受通配符模式。如果您不知道文件名是否以大写字母开头,那么这样做没有问题,但这样做不具有可伸缩性。
dpkg -S '[Ff][Ii][Ll][Ee][Nn][Aa][Mm][Ee].[Tt][Xx][Tt]'
无需任何额外的工具,您可以轻松地重现dpkg -S
内部操作:
grep -Fi filename.txt /var/lib/dpkg/info/*.list
您可以使用定位 dpkg -S
使用索引来加速(就像locate
加速一样find /
,但使用 获得的收益远不及dlocate
)。由于 是dlocate
基于 构建的locate
,因此它接受相同的选项,包括-i
不区分大小写的搜索。由于dlocate
使用索引(通常每晚重建),因此它可能略显过时。
dlocate -i filename.txt
apt 文件 在所有可供安装的软件包中搜索文件名。它有一个
-ui
不区分大小写的搜索选项。
apt-file -i search filename.txt