更新和定位命令问题 - 重新启动后不再索引外部硬盘驱动器中的文件

use*_*637 24 command-line locate updatedb

重新启动后,我的外部硬盘驱动器中的文件不再编入索引。我必须重新安装然后运行

# updatedb
Run Code Online (Sandbox Code Playgroud)

每次重启后。问题是我的外置硬盘需要几分钟的时间来更新。有什么办法可以在重新启动后保留我的外部设备的索引,以便 locate 命令可以搜索我的外部设备?

编辑:每个请求这里是我的规格:

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

# mount
/dev/sda5 on / type ext4 (rw,errors=remount-ro)
proc on /proc type proc (rw,noexec,nosuid,nodev)
none on /sys type sysfs (rw,noexec,nosuid,nodev)
none on /sys/fs/fuse/connections type fusectl (rw)
none on /sys/kernel/debug type debugfs (rw)
none on /sys/kernel/security type securityfs (rw)
none on /dev type devtmpfs (rw,mode=0755)
none on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=0620)
none on /dev/shm type tmpfs (rw,nosuid,nodev)
none on /var/run type tmpfs (rw,nosuid,mode=0755)
none on /var/lock type tmpfs (rw,noexec,nosuid,nodev)
none on /lib/init/rw type tmpfs (rw,nosuid,mode=0755)
binfmt_misc on /proc/sys/fs/binfmt_misc type binfmt_misc (rw,noexec,nosuid,nodev)
gvfs-fuse-daemon on /home/me/.gvfs type fuse.gvfs-fuse-daemon (rw,nosuid,nodev,user=me)
/dev/sdb1 on /media/me type fuseblk (rw,nosuid,nodev,allow_other,blksize=4096,default_permissions)
/dev/sdd1 on /media/Little Boy type fuseblk (rw,nosuid,nodev,allow_other,blksize=4096,default_permissions)
/dev/sde1 on /media/Fat Man type fuseblk (rw,nosuid,nodev,allow_other,blksize=4096,default_permissions)

# on_ac_power; echo $?
255
Run Code Online (Sandbox Code Playgroud)

les*_*ana 42

外部硬盘中的文件未编入索引,因为updatedb配置为不对 下的任何内容编制索引/media,这是通常安装外部存储的位置。此配置在文件中设置/etc/updatedb.conf。特别是/mediaPRUNEPATHS行中的条目。

如何updatedb为外部驱动器编制索引的一些想法:

1. 安装外部驱动器/mnt

如果您的外部硬盘应该永久安装,那么我建议将其配置为安装/mnt/media. 这通常可以通过编辑来完成/etc/fstab。搜索“fstab”以了解相关信息。您将需要 sudo 权限才能编辑/etc/fstab.

2. 为您的外部硬盘创建一个专用数据库并按需查询。

以下命令将创建一个专用数据库:

updatedb -l 0 -o ~/.externalharddisk.db -U /media/externalharddisk
Run Code Online (Sandbox Code Playgroud)

这将.externalharddisk.db在您家中的隐藏文件中创建数据库。您不需要sudo该命令。再次执行相同的命令以保持数据库更新。小心:如果在未挂载外部硬盘时运行该命令,updatedb则会认为文件已被删除并清空数据库。

您可以设置脚本来自动执行该任务。搜索“cronjob”以了解如何执行此操作。注意:您可以将用户 cronjob 设置为用户。您不需要 sudo 权限来设置用户 cronjob。

以下命令将查询数据库:

locate -d ~/.externalharddisk.db searchterm
Run Code Online (Sandbox Code Playgroud)

也可以同时查询专用数据库和默认数据库:

locate -d ~/.externalharddisk.db: searchterm
Run Code Online (Sandbox Code Playgroud)

末尾的冒号后面没有任何内容意味着也在默认数据库中搜索。

您可以创建别名以便于使用。将以下行放入您的.bashrc

alias locate-external='locate -d ~/.externalharddisk.db:'
Run Code Online (Sandbox Code Playgroud)

现在您可以locate只搜索默认数据库,locate-external也可以搜索外部硬盘。

3./mediaPRUNEPATHS

注意:我不推荐这个!这是因为工作方式updatedb。如果updatedb在移除外部硬盘时运行,则所有指向外部硬盘的条目都将从数据库中移除。如果updatedb在连接外部硬盘时运行,则将再次添加指向外部硬盘的条目。由于updatedb在后台定期运行,您永远无法确定外部硬盘中的文件当前是否已编入索引。

此外:如果您/media从 中删除PRUNEPATHS,此行为也将适用于您在updatedb更新数据库时碰巧安装的任何其他外部存储。

  • 您还可以将此别名添加到您的 `~/.bashrc` 文件中:`alias updatedb-external='sudo updatedb -l 0 -o ~/.externalharddisk.db -U /media/externalharddisk'` (2认同)