16.04 Найдите не найти файлы в /mnt

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

Интересно для меня, когда я cd /mnt/data/Downloads затем запустите locate, я вижу все в этом каталоге, но не на моем основном диске. Это похоже на то, что в 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 на моем компьютере, ниже приведены результаты:

@: ~ $ locate FreeNAS

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

@: ~ $ locate *.iso

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

@: ~ $ locate iso

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

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

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

@: ~ $ найти. -тип f -name "*.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. Это дало мне ошибку "не могу стат". Тайна продолжается.

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

Обновление 6: Итак, у меня есть решение, найдите "*.iso", но теперь мне интересно, "почему" это работает. Я посмотрел на страницу MAN и эти две ссылки: http://www.linfo.org/locate.html и http://www.howtogeek.com/112674/how-to-find-files-and-folders-in-linux-using-the-command-line/. Ничто из этого не проливает свет на то, почему это работает.

3 ответа

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

locate *.iso

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

locate file1.iso file2.iso

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

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

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

Если в текущем каталоге есть два или более файла conf и мы не используем кавычки, команда find не сможет выполнить синтаксический анализ второго сгенерированного имени файла, и наша плотность волос будет сильно снижена в отчаянии и поиске в Google;D, потому что появляется сообщение об ошибке не связано с отсутствием цитат.

По какой-то причине

locate *.iso 

только ищет в вашем текущем каталоге файлы.iso, пока

locate "*.iso" 

ищет все ваши диски. Это решение моей проблемы, хотя.

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
Другие вопросы по тегам