我有一个文件的名称,我需要确定哪个包提供了它。如果我不需要执行不区分大小写的搜索,那么以下命令就可以正常工作:
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