Utilisation de Locate pour rechercher un répertoire


20

J'utilise Locate tout le temps pour trouver des fichiers dont je connais le nom, Locate est très rapide et j'adore ça. Pour les fichiers récemment créés, la recherche est excellente, normalement avec les fichiers récemment créés, je sais où ils ont été créés, donc je n'ai pas à rechercher tout mon système de fichiers.

Quand j'ai oublié l'emplacement d'un répertoire, ni trouver ni localiser ne semble idéal.

Locate recrache toujours beaucoup trop d'informations car chaque fichier d'un répertoire correspond également à Locate. Par exemple, si je cherchais un répertoire nommé log quelque part sur mon système de fichiers, le journal de localisation retournerait des tonnes et des tonnes de résultats. Si je fais la même chose avec find, find / -name log -type d find prend quelques minutes à s'exécuter et crache toutes sortes d'erreurs d'autorisation chaque fois qu'il rencontre un dossier qu'il ne peut pas lire.

Y a-t-il une meilleure façon?

Réponse: Je m'en tiens donc à grep jusqu'à ce que je trouve autre chose:

locatedir () {
    for last; do true; done
    if [[ $last == *\/* ]]
    then
        locate $@ | grep "${last}\$"
    else
        locate $@ | grep "/${last}\$"
    fi
}

Réponses:


12

Une façon (je pense qu'il peut y avoir une meilleure façon) est d'utiliser grep pour ne renvoyer que les chemins qui se terminent par le nom de votre dossier:

locate foldername | grep /foldername$

28

Vous pouvez utiliser l'option --regex( -r) de locate:

locate -r '/log$'

Oui (+1). locatea sa propre capacité de regex intégrée: -rou --regex... pour une gamme complète d'options voir: info localiser
Peter.O

1
Je savais qu'il devait y avoir une meilleure façon!
misterben

Si court et ça marche bien. Grande contribution! Une autre raison d'apprendre / maîtriser les expressions régulières
loves.by.Jesus

Vous n'avez pas besoin des deux 'dans ce cas: locate -r /log$c'est suffisant.
simlev

5

As-tu essayé:

locate /home/insertusernamehere/*/filename?

ou

locate file | grep -i '^/home/.*/examplesubdirectory'?

ou toute variation de ce genre?


Cette réponse montre que ce grepn'est pas nécessaire, et comme le montre la première option suggérée, les regexps ne le sont pas non plus.
Tom

2

C'est ici

locatedir () {
    locate "$*" | while read line
    do 
    if [ -d "$line" ] ; then echo $line ; fi
    done
}

locatedir $*

1
Si vous pouvez expliquer quels changements vous avez apportés, cela sera utile pour d'autres aussi.
Ron
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.