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