web-dev-qa-db-fra.com

Utiliser Locate pour trouver un répertoire

J'utilise localiser tout le temps pour trouver des fichiers dont je connais le nom, localiser est très rapide et j'adore ça. Pour les fichiers récemment créés trouver c'est génial. Normalement, avec les fichiers récemment créés, je sais où ils ont été créés. Je n'ai donc pas à chercher dans tout mon système de fichiers.

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

Locate génère toujours trop d'informations, car chaque fichier d'un répertoire est également une correspondance pour une localisation. Par exemple, si je cherchais un répertoire nommé log quelque part sur mon système de fichiers, localiser le journal renverrait des tonnes et des tonnes de résultats. Si je fais la même chose avec find, find/nom-log type-type d find prend quelques minutes à s'exécuter et génère toutes sortes d'erreurs d'autorisations chaque fois qu'il rencontre un dossier qu'il ne peut pas lire.

Y a-t-il un meilleur moyen?

Réponse: Je reste donc avec 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
}
20
Michael

Un moyen (j'imagine qu'il pourrait exister un meilleur moyen) consiste à utiliser grep pour ne renvoyer que les chemins se terminant par le nom de votre dossier:

locate foldername | grep /foldername$
12
misterben

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

locate -r '/log$'
28
Florian Diesch

As-tu essayé:

locate /home/insertusernamehere/*/filename?

ou

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

ou toute variante de celle-ci?

5
RolandiXor

C'est ici

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

locatedir $*
2
Linuxuser