J'ai une installation 16.04 configurée avec mon dossier Téléchargements pointant sur un disque dur secondaire (affiche Downloads -> /mnt/data/Downloads
). Lorsque je lance locate
pour rechercher des fichiers, aucun fichier n’est affiché sur ce lecteur. J'ai exécuté un Sudo updatedb
et je vérifie mon updatedb.conf
(rien que je ne vois exclure le répertoire /mnt
ou les fichiers que je cherche).
Ce qui est intéressant pour moi, c’est que lorsque je cd /mnt/data/Downloads
puis j’exécute localise , je peux tout voir dans ce répertoire, mais pas sur mon lecteur principal. C'est presque comme si Ubuntu avait deux bases de données de localisation différentes selon le lecteur sur lequel je suis.
Comment puis-je remédier à cette situation?
Supplémentaire: Voici mon 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"
J'ai essayé de lancer Sudo locate
et cela n'a pas changé les résultats. J'ai essayé de lancer mlocate
et Sudo mlocate
et cela n'a pas changé les résultats non plus.
J'ai aussi essayé de trouver un autre fichier updatedb.conf
et je suis arrivé vide.
pdate 1: Le système de fichiers sur le lecteur secondaire est ext4.
pdate 2: Rien n'est crypté non plus. Je suis allé sur Google et j'ai remarqué que c'était un problème pour certains utilisateurs.
Mise à jour 3: Je suis plus confus maintenant. J'essaie de trouver tous les fichiers .iso sur ma machine, voici les résultats:
@: ~ $ localise FreeNAS
/mnt/data/Downloads/FreeNAS-9.3-RELEASE.iso
@: ~ $ localiser * .iso
/home/hudsona/ubuntu-16.04.1-server-AMD64.iso
@: ~ $ localiser iso
/home//ubuntu-16.04.1-server-AMD64.iso
/mnt/data/Downloads/FreeNAS-9.3-RELEASE.iso
(et un tas d'autres résultats)
@: ~ $ find. -type f -name "* .iso"
./ubuntu-16.04.1-server-AMD64.iso
Mise à jour 4: Plus de résultats: Sudo find/-type f -name "* .iso" me donne les résultats que je veux mais prend beaucoup de temps pour revenir avec ces résultats .
Je voulais creuser et voir si j'avais effectivement deux bases de données différentes car je reçois des résultats de localisation différents en fonction du lecteur sur lequel je me trouve. Après avoir consulté la page MAN, j'ai recherché un fichier mlocate.db sur mon système, voici mes résultats:
Je pensais que le fichier .VEzhqO pourrait être une base de données secondaire, alors j'ai essayé de le spécifier avec l'indicateur -d pour la commande de localisation. Cela m'a donné "ne peut pas stat" erreur. Le mystère continue.
pdate 5: Je l'ai reproduit sur une autre machine Ubuntu, édition serveur 16.04.
pdate 6: J'ai donc une solution, localisez "* .iso" mais maintenant, je suis curieux de savoir pourquoi cela fonctionne. J'ai regardé la page MAN et ces deux liens: http://www.linfo.org/locate.html et http: //www.howtogeek. com/112674/comment-trouver-fichiers-et-dossiers-dans-linux-utilisant-la-ligne de commande / . Aucune de celles-ci n'a permis de comprendre pourquoi cela fonctionne.
Dans tous les shells, l’utilisation de *.iso
étend la liste des fichiers avant d’appeler la commande.
locate *.iso
le shell développe automatiquement l'expression en créant une liste de noms de fichiers à partir des fichiers du répertoire en cours. Supposons qu'il y ait deux fichiers iso file1.iso
et file2.iso
dans le répertoire en cours; la commande résultante sera en réalité:
locate file1.iso file2.iso
alors le Shell l'exécutera. Ainsi, locate
essaiera de trouver des fichiers contenant ces deux chaînes, en recherchant efficacement "*file1.iso*"
ou "*file2.iso*"
.
C'est pourquoi locate iso
trouve plus de fichiers que locate *.iso
; locate
recherche actuellement "*iso*"
dans le premier cas. La solution (et la bonne façon de l'utiliser, à mon humble avis) cite les caractères spéciaux du shell lorsque la commande accepte les expressions les utilisant, comme la commande suivante find
:
find /etc/ -type f -iname "*.conf"
S'il y a deux fichiers ou plus dans le répertoire en cours et que nous n'utilisons pas de guillemets, la commande find échouera à analyser le deuxième nom de fichier généré et la densité de nos cheveux sera sérieusement réduite en cas de désespoir et de recherche sur Google; D car le message d'erreur semble non liée à l'absence de guillemets.
Locate applique automatiquement *
avant et après la chaîne, de sorte que la solution la plus simple est la suivante:
locate .iso
J'ai aussi deux disques Windows montés. Lorsque vous utilisez locate
à partir de la partition Ubuntu, vous obtenez des résultats similaires à ceux de votre question. En utilisant cette réponse, les résultats corrects sont obtenus:
───────────────────────────────────────────────────────────────────────────────────────────
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
Pour certaines raisons,
locate *.iso
recherche uniquement dans votre répertoire actuel les fichiers .iso
locate "*.iso"
recherche dans tous vos lecteurs. C'est la solution à mon problème cependant.