web-dev-qa-db-fra.com

La commande de localisation trouve le chemin d'un fichier, mais le fichier n'existe pas dans ce chemin

J'ai écrit:

locate Origin90SR2DVD.iso

Et j'ai reçu le chemin où se trouve ce fichier:

/home/david/Origin90SR2DVD.iso

Alors j'ai écrit:

cd /home/david

J'ai couru:

ls -lrth

Et je ne trouve pas le fichier Origin90SR2DVD.iso.

Pourquoi le fichier n'est pas dans ce chemin?

5
Dave

Il est possible que vous ayez le fichier Origin90SR2DVD.iso à l’emplacement /home/david lorsque le fichier de base de données de locate (/var/lib/mlocate/mlocate.db) a été mis à jour la dernière fois par cron (ou vous-même). Comme locate juste pour les noms de fichier dans le fichier de base de données (c'est pourquoi c'est rapide) pendant la recherche, vous pouvez considérer que sa technique n'est pas en direct .

Bien que locate indique l'emplacement du fichier, il est fort possible que le fichier n'y soit pas présent (il peut être supprimé ou déplacé ailleurs).

Vous avez deux moyens d'être sûr de ce qui se passe:

  • Vous pouvez mettre à jour le fichier de base de données locate avec Sudo updatedb, puis exécuter la même commande locate.

  • Sinon, vous pouvez utiliser find pour effectuer une recherche en direct . Pour rechercher le fichier dans votre répertoire personnel de manière récursive:

    find ~ -type f -iname 'Origin90SR2DVD.iso' -print -o -path ~/.gvfs -Prune
    

    -path ~/.gvfs -Prune (grâce à Eliah Kagan) est utilisé pour ne pas descendre dans le répertoire ~/.gvfs lors de la recherche. Sinon, nous obtiendrons un message d'autorisation refusée gênant, étant donné que le répertoire appartient à root. Vous pouvez l'omettre (et voir le message) en supprimant -print -o -path ~/.gvfs -Prune.

    Vous pouvez également rechercher tous les emplacements possibles dans la hiérarchie du système de fichiers. Ici, j’ai envisagé peu d’endroits pouvant contenir le fichier. Ce sera inhabituel si votre fichier se trouve dans un autre répertoire.

    Sudo find /home /root /opt /usr/local /mnt -type f -iname 'Origin90SR2DVD.iso'
    

EDIT:

La base de données de locate est mise à jour quotidiennement par cron. Dans mon système, il est exécuté tous les jours à 6h25 (vérifiez votre code /etc/crontab).

En fait, anacron exécutera le travail cron pour s’assurer que, si l’ordinateur est éteint à ce moment-là, il sera exécuté après sa prochaine mise sous tension. Si anacron n'est pas disponible, run-parts exécutera les fichiers (y compris mlocate) dans le répertoire /etc/cron.daily uniquement à l'heure indiquée.

5
heemayl

Exécutez Sudo updatedb pour vous assurer que votre base de données mlocate est à jour.

2
mkasberg