Tengo una instalación 16.04 configurada con mi carpeta de Descargas apuntando a un disco duro secundario (se muestra Downloads -> /mnt/data/Downloads
). Cuando corro locate
para buscar archivos, no muestra ningún archivo en esta unidad. Ejecuté sudo updatedb
y revisé mi updatedb.conf
(nada de lo que veo excluyó el /mnt
directorio o los archivos que estoy buscando)
Lo interesante para mí es cuando cd /mnt/data/Downloads
luego corrolocalizarPuedo ver todo en este directorio pero no en mi disco principal. Es casi como si Ubuntu tuviera dos bases de datos de ubicación diferentes según la unidad en la que me encuentre.
¿Cómo puedo remediar esta situación?
Adicional: Aquí está miupdatedb.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"
Intenté ejecutar sudo locate
y eso no cambió los resultados. Intenté ejecutar mlocate
y sudo mlocate
eso tampoco cambió los resultados.
También intenté buscar otro updatedb.conf
archivo y no encontré nada.
Actualización 1:El sistema de archivos en la unidad secundaria es ext4.
Actualización 2:Tampoco hay nada cifrado. Estuve buscando en Google y noté que esto ha sido un problema para algunos usuarios.
Actualización 3:Estoy más confundido ahora. Estoy intentando encontrar todos los archivos .iso en mi máquina, a continuación se muestran los resultados:
@:~$ localizar FreeNAS
/mnt/data/Descargas/FreeNAS-9.3-RELEASE.iso
@:~$ localizar *.iso
/home/hudsona/ubuntu-16.04.1-server-amd64.iso
@:~$ localizar iso
/home//ubuntu-16.04.1-servidor-amd64.iso
/mnt/data/Descargas/FreeNAS-9.3-RELEASE.iso
(y muchos otros resultados)
@:~$ encontrar. -tipo f -nombre "*.iso"
./ubuntu-16.04.1-servidor-amd64.iso
Actualización 4:Más resultados:sudo buscar / -tipo f -nombre "*.iso"Me da los resultados que quiero pero lleva mucho tiempo volver a obtener esos resultados.
Quería profundizar y ver si realmente tenía dos bases de datos diferentes, ya que obtengo diferentes resultados de localización según la unidad en la que estoy. Después de comprobar la página MAN, busqué un archivo mlocate.db en mi sistema, aquí están mis resultados. :
- /usr/share/man/man5/mlocate.db.5.gz
- /var/lib/mlocate/mlocate.db
- /var/lib/mlocate/mlocate.db.VEzhqO
Estaba pensando que era posible que el archivo .VEzhqO fuera una base de datos secundaria, así que intenté especificarlo con el indicador -d para el comando de localización. Eso me dio el error "no se puede iniciar". El misterio continúa.
Actualización 5:He reproducido esto en otra máquina Ubuntu, edición de servidor 16.04.
Actualización 6:Entonces tengo una solución, localice "*.iso", pero ahora tengo curiosidad por saber "por qué" funciona. Miré la página MAN y estos dos enlaces:http://www.linfo.org/locate.htmlyhttp://www.howtogeek.com/112674/how-to-find-files-and-folders-in-linux-using-the-command-line/. Ninguno de estos arroja ninguna luz sobre por qué funciona.
Respuesta1
En todos los shells, el uso *.iso
se expande a una lista de archivos antes de llamar al comando, por lo que en
locate *.iso
el shell expande automáticamente la expresión creando una lista de nombres de archivos a partir de archivos en el directorio actual. Supongamos que en el directorio actual hay dos archivos iso file1.iso
y file2.iso
; el comando resultante en realidad será:
locate file1.iso file2.iso
entonces el shell lo ejecutará. Por lo tanto, locate
intentaremos encontrar archivos que contengan estas dos cadenas, buscando efectivamente "*file1.iso*"
o "*file2.iso*"
.
Por eso locate iso
busca más archivos que locate *.iso
; locate
en realidad está buscando "*iso*"
en el primer caso. La solución (y la forma correcta de usarla, en mi humilde opinión) es citar los caracteres especiales del shell cuando el comando acepta expresiones que los usan, como el siguiente find
comando:
find /etc/ -type f -iname "*.conf"
Si hay dos o más archivos conf en el directorio actual y no usamos comillas, el comando de búsqueda fallará al analizar el segundo nombre de archivo generado, y nuestra densidad de cabello se reducirá severamente por la desesperación y la búsqueda en Google; D porque el mensaje de error parece no relacionado con la ausencia de comillas.
Respuesta2
Por alguna razón,
locate *.iso
solo busca en su directorio actual archivos .iso mientras
locate "*.iso"
busca en todas sus unidades. Sin embargo, esta es la solución a mi problema.
Respuesta3
La localización se aplica automáticamente *
antes y después de la cadena, por lo que la solución más sencilla es:
locate .iso
También tengo dos unidades de Windows montadas. cuando ejecuto locate
desde la partición de Ubuntu obtengo resultados similares a los de su pregunta. Usando esta respuesta se obtienen los resultados correctos:
───────────────────────────────────────────────────────────────────────────────────────────
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