16.04 Локатор не находит файлы в /mnt

16.04 Локатор не находит файлы в /mnt

У меня есть установка 16.04, настроенная с папкой «Загрузки», указывающей на второй жесткий диск (показывает Downloads -> /mnt/data/Downloads). Когда я запускаю locateпоиск файлов, он не показывает никаких файлов на этом диске. Я запустил sudo updatedbи проверяю свой updatedb.conf(ничего не вижу, кроме /mntкаталога или файлов, которые я ищу)

Для меня самое интересное, когда я cd /mnt/data/Downloadsпотом бегунайтиЯ вижу все в этом каталоге, но не на моем основном диске. Это почти как если бы у Ubuntu было две разные базы данных locate в зависимости от того, на каком диске я нахожусь.

Как я могу исправить эту ситуацию?

Дополнительный: Вот мой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, и это не изменило результаты. Я попробовал бегать mlocate, sudo mlocateи это тоже не изменило результаты.

Я также попытался найти другой updatedb.confфайл, но ничего не вышло.

Обновление 1:Файловая система на вторичном диске — ext4.

Обновление 2:Ничего не зашифровано. Я погуглил и заметил, что у некоторых пользователей это проблема.

Обновление 3:Я еще больше запутался. Я пытаюсь найти все файлы .iso на моей машине, ниже приведены результаты:

@:~$ найдите FreeNAS

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

@:~$ найдите *.iso

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

@:~$ найти iso

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

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

(и куча других результатов)

@:~$ найти . -тип f -имя "*.iso"

./ubuntu-16.04.1-server-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. Это дало мне ошибку "can not stat". Тайна продолжается.

Обновление 5:Я воспроизвел это на другой машине с Ubuntu, серверная версия 16.04.

Обновление 6:Итак, у меня есть решение, найти "*.iso", но теперь мне интересно, "почему" это работает. Я посмотрел на страницу MAN и эти две ссылки:http://www.linfo.org/locate.htmlиhttp://www.howtogeek.com/112674/как-найти-файлы-и-папки-в-linux-используя-командную-строку/. Ничто из этого не проливает света на то, почему это работает.

решение1

Во всех оболочках использование *.isoрасширяет список файлов перед вызовом команды, поэтому в

locate *.iso

оболочка автоматически расширяет выражение, создавая список имен файлов из файлов в текущем каталоге. Предположим, что в текущем каталоге есть два файла iso file1.isoи file2.iso; результирующая команда будет на самом деле:

locate file1.iso file2.iso

то оболочка выполнит его. Итак, locateпопытается найти файлы, содержащие эти две строки, фактически выполнив поиск "*file1.iso*"или "*file2.iso*".

Вот почему locate isofind больше файлов, чем locate *.iso; locateна самом деле ищет "*iso*"в первом случае. Решение (и правильный способ его использования, IMHO) — это цитирование специальных символов оболочки, когда команда принимает выражения с их использованием, как в следующей findкоманде:

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

Если в текущем каталоге есть два или более файлов conf и мы не используем кавычки, команда find не сможет проанализировать второе сгенерированное имя файла, и наша густота волос значительно уменьшится в отчаянии и поиске в Google ;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

Связанный контент