16.04 Locate 未在 /mnt 中找到文件

16.04 Locate 未在 /mnt 中找到文件

我安装了一个 16.04,其中下载文件夹指向辅助硬盘(显示Downloads -> /mnt/data/Downloads)。当我运行locate搜索文件时,它没有显示此驱动器上的任何文件。我运行了sudo updatedb并检查了我的updatedb.conf(我没有看到任何排除/mnt目录或我正在寻找的文件)

对我来说有趣的是当我cd /mnt/data/Downloads定位我可以看到此目录中的所有内容,但看不到主驱动器上的所有内容。这几乎就像 Ubuntu 有两个不同的定位数据库,具体取决于我所在的驱动器。

我该如何补救这种情况?

额外的:这是我的updatedb.conf

PRUNE_BIND_MOUNTS="yes"
# PRUNENAMES=".git .bzr .hg .svn"
PRUNEPATHS="/tmp /var/spool /media /home/.ecryptfs /var/lib/schroot"
PRUNEFS="NFS nfs nfs4 rpc_pipefs afs binfmt_misc proc smbfs autofs iso9660 ncpfs coda devpts ftpfs devfs mfs shfs sysfs cifs lustre tmpfs usbfs udf fuse.glusterfs fuse.sshfs curlftpfs ecryptfs fusesmb devtmpfs"

我尝试跑步sudo locate,但结果并没有改变。 我尝试跑步mlocatesudo mlocate但结果并没有改变。

我还尝试查找另一个updatedb.conf文件,但一无所获。

更新 1:辅助驱动器上的文件系统是 ext4。

更新 2:也没有加密任何东西。我在 Google 上搜索了一下,发现这对一些用户来说是个问题。

更新 3:我现在更困惑了。我试图找到我机器上的所有 .iso 文件,结果如下:

@:~$ 定位 FreeNAS

/mnt/data/Downloads/FreeNAS-9.3-RELEASE.iso

@:~$ 定位 *.iso

/home/hudsona/ubuntu-16.04.1-server-amd64.iso

@:~$ 定位 iso

/主页//ubuntu-16.04.1-服务器-amd64.iso

/mnt/data/Downloads/FreeNAS-9.3-RELEASE.iso

(以及许多其他结果)

@:~$ find .-type f-name "*.iso"

./ubuntu-16.04.1-服务器-amd64.iso

更新 4:更多结果:sudo find / -type f -name“*.iso”给了我想要的结果但是需要很长时间才能得到这些结果。

我想深入研究一下我是否确实有两个不同的数据库,因为根据我所在的驱动器,我会得到不同的定位结果。检查完 MAN 页面后,我在我的系统上搜索了 mlocate.db 文件,下面是我的结果:

  • /usr/share/man/man5/mlocate.db.5.gz
  • /var/lib/mlocate/mlocate.db
  • /var/lib/mlocate/mlocate.db.VEzhqO

我认为 .VEzhqO 文件可能是辅助数据库,因此我尝试使用 -d 标志为locate 命令指定它。结果出现了“无法统计”错误。谜团仍在继续。

更新 5:我已经在另一台 Ubuntu 机器(16.04 服务器版本)上重现了这个问题。

更新 6:所以我有一个解决方案,找到“*.iso”,但现在我很好奇“为什么”它有效。我查看了 MAN 页面和以下两个链接:http://www.linfo.org/locate.htmlhttp://www.howtogeek.com/112674/how-to-find-files-and-folders-in-linux-using-the-command-line/. 这些都不能解释为什么这样做有效。

答案1

在所有 shell 中,使用*.iso在调用命令之前扩展为文件列表,因此在

locate *.iso

shell 会自动扩展表达式,从当前目录中的文件创建文件名列表。假设当前目录中有两个 iso 文件file1.isofile2.iso;生成的命令实际上将是:

locate file1.iso file2.iso

然后 shell 就会执行它。因此,locate将尝试查找包含这两个字符串的文件,实际上是搜索"*file1.iso*""*file2.iso*"

这就是为什么在第一种情况下 find 比;实际搜索的locate iso文件更多的原因。解决方案(也是正确的使用方法,恕我直言)是在命令接受使用 shell 的特殊字符的表达式时引用它们,例如以下命令:locate *.isolocate"*iso*"find

find /etc/ -type f -iname "*.conf"

如果当前目录中有两个或多个 conf 文件,并且我们不使用引号,则 find 命令将无法解析生成的第二个文件名,并且我们的头发密度将在绝望和谷歌搜索中严重降低;D 因为错误消息似乎与没有引号无关。

答案2

因为某些原因,

locate *.iso 

只在当前目录中搜索 .iso 文件,而

locate "*.iso" 

搜索所有驱动器。不过,这是解决我的问题的方法。

答案3

Locate 会自动应用于*字符串之前和之后,因此最简单的解决方案是:

locate .iso

我还安装了两个 Windows 驱动器。locate从 Ubuntu 分区运行时,我得到的结果与您的问题类似。使用此答案可获得正确的结果:

───────────────────────────────────────────────────────────────────────────────────────────
rick@alien:~/Downloads/cfiles$ locate "*.iso" | wc -l
3
───────────────────────────────────────────────────────────────────────────────────────────
rick@alien:~/Downloads/cfiles$ locate *.iso | wc -l
3
───────────────────────────────────────────────────────────────────────────────────────────
rick@alien:~/Downloads/cfiles$ locate .iso | wc -l
45

相关内容